首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ActiveMQ生产者连接到OpenMQ JMS

如何将ActiveMQ生产者连接到OpenMQ JMS
EN

Stack Overflow用户
提问于 2013-02-12 17:20:07
回答 2查看 8.5K关注 0票数 2

我试图从swing重型客户端(使用)向glassfish服务器实例发送文本消息,该服务器似乎使用ActiveMQ作为默认的OpenMQ提供程序。

下面是我为我的客户使用的基本源代码:

代码语言:javascript
复制
try {
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("jms/SaisieQueueFactory");
    connectionFactory.setBrokerURL("tcp://localhost:27676");
    Connection connection = connectionFactory.createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Destination destination = session.createQueue("jms/SaisieQueue");
    MessageProducer producer = session.createProducer(destination);
    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
    TextMessage message = session.createTextMessage("Score + 1");
    producer.send(message);
    session.close();
    connection.close();
} catch(Exception ex) {
    ex.printStackTrace();
}
  • 我从Glassfish服务器(JMS_PROVIDER_PORT)的管理控制台中找到了系统属性中的代理端口。
  • 当我部署MessageDrivenBean时,队列连接工厂和队列已经创建。
  • 目前,客户机和glassfish实例运行在同一台计算机上,但我希望它们在两台不同的机器上工作(这就是为什么我不使用vm://作为传输协议的原因)。

我有一些例外:

代码语言:javascript
复制
javax.jms.JMSException: Cannot send, channel has already failed: tcp://127.0.0.1:7676
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
    at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1395)
    at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1481)
    at org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:516)
    at testdate.TestDate.main(TestDate.java:44)
Caused by: org.apache.activemq.transport.InactivityIOException: Cannot send, channel has already failed: tcp://127.0.0.1:7676
    at org.apache.activemq.transport.AbstractInactivityMonitor.doOnewaySend(AbstractInactivityMonitor.java:282)
    at org.apache.activemq.transport.AbstractInactivityMonitor.oneway(AbstractInactivityMonitor.java:271)
    at org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:85)
    at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104)
    at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
    at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81)
    at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86)
    at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1366)
    ... 3 more
  • 我考虑了将我的Glassfish实例的JMS更改为ActiveMQ的解决方案,但是如果可能的话,我希望保留OpenMQ

PS:我是JMS和Java框架的初学者

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-13 05:45:29

JMS定义了一个java接口和一个消息传递体系结构,它不定义任何特定的有线协议,它可以是一个载体鸽子,在内存中或任何常见格式(STOMP、OpenWire、AMQP、MQTT)中。

为什么不能在客户端中使用Open库呢?这就是JMS的设计方式。您只需从.jar文件切换并更改ConnectionFactory

我认为没有任何理由仅仅为了使用ActiveMQ JMS客户机而切换到ActiveMQ,因为它应该与Open客户机几乎是一样的。不过,还有其他原因需要切换,例如不同的服务器端特性以及其他不需要的功能,但您没有提到这一点。

也就是说,桥组件可以通过STOMP协议( ActiveMQ支持的)公开任何JMS服务器。

它被称为双脚连接,在OpenMQ页面上有一些相当旧的指令如何使用它。

从那里,您应该能够连接到ActiveMQConnection工厂指定STOMP。但我自己也没试过这种组合。

票数 3
EN

Stack Overflow用户

发布于 2013-02-12 19:29:22

AcitveMQ JMS客户端只能与ActiveMQ服务器对话。使用OpenMQ JMS客户端与OpenMQ服务器对话。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14838127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档