我对此有疑问,我也创建了一个带有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;
}
提前致谢,
答案 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
:它不会重新创建现有队列,它只会使用它。