美好的一天,
我正在尝试配置消息驱动的bean来订阅外部主题。我和我的同事一起成功地用JSE客户端听这个主题,看起来像这样。
public static void main(String[] args) {
TopicSession sess = null;
TopicConnection conn = null;
TopicSubscriber consumer = null;
Properties props = new Properties();
p.put("java.naming.provider.url", "remote://#server-name#:#server-port(4747)#");
p.put("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory");
p.put("java.naming.security.principal", "#username#");
p.put("java.naming.security.credentials", "#password#");
InitialContext context = new InitialContext(props);
TopicConnectionFactory factory = (TopicConnectionFactory)context.lookup("jms/RemoteConnectionFactory");
conn = factory.createTopicConnection("#username#", "#password#");
conn.setClientID("#client-id#");
sess = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic)context.lookup("jms/topic/#topic-name#");
consumer = sess.createSubscriber(topic);
consumer.setMessageListener(new MyTopicListener());
try {
conn.start();
// ... loop until done.
} finally {
consumer.close();
sess.close();
conn.close();
}
}
如何将其移至MDB?
据我所知,我们可以使用MessageDriven注释的activationConfig设置destinationType,connectionFactoryJndiName,destinationJndiName,initialContextFactory。但远程URL,用户名和密码怎么样?
仅供参考,我使用的是JBoss AS 7.1.1,这适用于MDB 3.0。
非常感谢您提供任何答案和评论。
答案 0 :(得分:1)
HornetQ有一个入站和出站资源适配器。入站JCA RA用于通过消息驱动Bean(MDB)消费消息。可以使用MDB的激活配置属性配置资源适配器,如以下示例所示:
@MessageDriven(name = "ExampleMDB", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "testQueue"),
@ActivationConfigProperty(propertyName = "connectorClassName", propertyValue ="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory"),
@ActivationConfigProperty(propertyName = "connectionParameters", propertyValue = "host=172.168.1.137;port=5445")})
public class ExampleMDB implements MessageListener {
public void onMessage(Message recvMsg) {
...
}
}
有关配置属性的完整列表,请参阅HornetQ文档:http://docs.jboss.org/hornetq/
答案 1 :(得分:1)