使用 JBoss 将消息发布到远程 JMS 队列

2023-12-20

这看起来很简单,但我找不到简单的答案。

我想打开到远程 JMS 代理的连接(IP 和端口已知),打开到特定队列(名称已知)的会话并向该队列发布消息。

是否有任何简单的 Java API(如果可能的话,标准)可以做到这一点?


EDIT

好吧,我现在明白 JMS 是一个驱动程序规范,就像 JDBC 一样,而不是我想象的通信协议。

鉴于我在 JBoss 中运行,我仍然不明白如何创建JBoss 连接工厂 http://www.jboss.org/file-access/default/members/jbossmessaging/freezone/docs/javadoc/api-1.4.0.SP1/org/jboss/jms/client/JBossConnectionFactory.html.


EDIT

我实际上对这个问题进行了一些思考(嗯),如果 JMS 需要像 JDBC 一样对待,那么我需要使用我的 MQ 实现提供的客户端。由于我们使用 SonicMQ 作为代理,因此我决定嵌入 SonicMQ 提供的 sonic_Client.jar 库。

这是在独立的 Java 应用程序和我们的 JBoss 服务中运行的。

谢谢您的帮助


您需要使用 JMS,创建一个QueueConnectionFactory然后从那里开始。具体如何创建QueueConnectionFactory将是特定于供应商的(JMS 基本上是消息队列的驱动程序规范,就像 JDBC 对于数据库一样),但在 IBM MQ 上它是这样的:

MQQueueConnectionFactory connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setHostName(<hostname>);
connectionFactory.setPort(<port>);
connectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
connectionFactory.setQueueManager(<queue manager>);
connectionFactory.setChannel("SYSTEM.DEF.SVRCONN");

QueueConnection queueConnection = connectionFactory.createQueueConnection();
QueueSession queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

Queue queue = queueSession.createQueue(<queue name>);

QueueSender queueSender = session.createSender(queue);
QueueReceiver queueReceiver = session.createReceiver(queue); 

编辑(以下问题编辑)

访问远程队列或任何与此相关的队列的最佳方法是添加QueueJNDI 注册表的实例。对于远程队列,这是使用添加了以下内容的 MBean 来实现的:Queue服务器启动时的实例。

看一眼http://www.jboss.org/community/wiki/UsingWebSphereMQSeriesWithJBossASPart4 http://www.jboss.org/community/wiki/UsingWebSphereMQSeriesWithJBossASPart4,虽然这是 IBM MQ 的示例,但本质上是连接到任何远程队列所必须执行的操作。

如果你看jbossmq-destinations-service.xml and org.jboss.mq.server.jmx您将看到需要创建的与 JBoss 队列相关的 MBean。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JBoss 将消息发布到远程 JMS 队列 的相关文章

随机推荐