0

大家好,

我正在尝试配置一个消息驱动的 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。

非常感谢您的任何回答和评论。

4

2 回答 2

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/

于 2012-11-15T22:03:22.707 回答
1

您还可以查看新的 hornetrq http://www.packtpub.com/hornetq-messaging-developers-guide/book

于 2012-12-19T19:30:20.467 回答