我将如何用Java编程为Mule编写ActiveMQ Producer?

时间:2013-08-28 17:03:23

标签: java activemq mule

我对此有疑问,我也创建了一个带有Connector-Reference的ActiveMQ连接器:

<jms:activemq-connector name="Active_MQ" specification="1.1" brokerURL="tcp://localhost:61616" validateConnections="false"  doc:name="Active MQ" >
    <reconnect count="5"  />
</jms:activemq-connector>

我知道我可以通过Java做到这一点:

Connector amqConnector = eventContext.getMuleContext().getRegistry().lookupConnector("Active_MQ");

但是如何通过使用此连接器数据而不是使用JNDI来创建生产者?我读过的所有教程都使用InitialContext通过lookup()获取JNDI道具。

此外,在我的ActiveMQ配置文件中,我正在创建队列。所以它已经创建了Queue,我只需要生产者访问该Queue而不是创建它。

我的queueName会在ActiveMQConnection“DestinationSource”中吗?如何从Java获取activemq配置文件中的队列名称或信息?

/////在大卫的帮助之后添加:

这就是我现在所拥有的:

@Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        String payload = eventContext.getMessage().getPayloadAsString();
        JmsConnector amqConnector = (JmsConnector) eventContext.getMuleContext().getRegistry().lookupConnector("Active_MQ");
        ConnectionFactory factory = amqConnector.getConnectionFactory();
        Connection connection; 

        connection = factory.createConnection();

        try {
            connection.start();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Queue queue = session.createQueue("ExampleQueue");

            MessageProducer producer = session.createProducer(queue);           
            producer.send(session.createTextMessage(payload), DeliveryMode.NON_PERSISTENT, 0, 5000);

        }finally {
            connection.close();
        }

        return eventContext;
    }

提前致谢,

1 个答案:

答案 0 :(得分:1)

从那里获得连接工厂:

Connection connection = amqConnector.getConnectionFactory().createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("yourQueue");
MessageProducer producer = session.createProducer(queue);
...

不要担心session.createQueue:它不会重新创建现有队列,它只会使用它。