0

我对此有疑问,我还创建了一个带有连接器参考的 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 通过查找()来获取 JNDI 道具。

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

我的 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;
    }

提前致谢,

4

1 回答 1

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:它不会重新创建现有队列,它只会使用它。

于 2013-08-28T17:26:29.120 回答