【问题标题】:What's the class used by Mule to send JMS Message (Endpoint)Mule用来发送JMS消息的类是什么(端点)
【发布时间】:2013-09-02 01:38:45
【问题描述】:

我正在尝试使用现有的 Mule 代码发送消息。已经编写了一些代码,但由于某种原因,据我所知,有一个轴“错误”。

使用 JMSEndpoint 然后调用“call”方法发送消息并等待响应。这是我的代码:

        String payload = eventContext.getMessage().getPayloadAsString();
        JmsConnector amqConnector = (JmsConnector) eventContext.getMuleContext().getRegistry().lookupConnector("Active_MQ");
        JMSVendorAdapter adapter = JMSVendorAdapterFactory.getJMSVendorAdapter();
        QueueConnector connector = new QueueConnector(amqConnector.getConnectionFactory(), 1, 1, 2000, 2000, 60000, true, null, null, null, adapter, null);

        Connection connection = connector.getConnectionFactory().createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue("ExampleQueue");
        JMSEndpoint endpoint = connector.createEndpoint(queue);
        connector.start();

//      Byte byteMessage = new Byte(payload);
//      BytesMessage mess = session.createBytesMessage();
//      mess.writeByte(byteMessage);

        byte[] response = endpoint.call(payload.getBytes("UTF-8"), 10000);

        return response.toString();

该方法本身要求一个字节[],所以我给它一个带有 UTF-8 字符集的字节[]。 但是它抛出了这个错误:

org.apache.axis.transport.jms.InvokeException: Error: unexpected message type received - expected BytesMessage

在 JMSConnector 类中,它在此块中失败:

BytesMessage response = null;
                try {
                    response = (BytesMessage)subscriber.receive(timeout);
                } catch (ClassCastException cce) {
                    throw new InvokeException
                            ("Error: unexpected message type received - expected BytesMessage");
                }

有一张关于这个问题的已开票,他们称之为“错误”???所以它有点抛出 ClassCastException !不敢相信这是制作的!有办法解决这个吗???那骡子是怎么做到的呢??

如何像 Mule 在其组件中那样实现将 JMS 消息发送到队列?

谢谢。

【问题讨论】:

  • 您是否出于任何特定原因手动使用连接器?我认为最好的方法是使用 MuleClient.send (如果您有异步调用,则使用 dispatch)。

标签: java jms activemq mule


【解决方案1】:

Mule 使用 org.mule.transport.jms.JmsMessageDispatcher 将消息分派到 JMS 目的地

【讨论】:

  • 正如 Seba 所说,使用调度程序最简单的方法是通过 MuleClient。
  • 是的,尝试使用 JmsMessageDispatcher 但没有参数来添加队列名称或其他内容。
  • 现在伙计们,Mule 每次通过这个 JMS 组件时都会打开和关闭连接吗?还是让它打开?
  • JmsMessageDispatcher 使用它所依赖的 JmsConnector 提供的单个连接。
  • 哦,太棒了!所以这可以通过使用动态队列名称毫无问题地实现! :) 伟大的!!!谢谢大卫
猜你喜欢
  • 2019-03-25
  • 2016-03-02
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2016-01-11
相关资源
最近更新 更多