繁体   English   中英

如何将ActiveMQ生成器连接到OpenMQ JMS代理

[英]How to connect an ActiveMQ producer to an OpenMQ JMS broker

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

在我的客户端使用的源代码基本代码下面:

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://作为传输协议)

我有这些例外:

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 EE框架的初学者

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

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

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

我没有看到任何理由仅仅为了使用ActiveMQ JMS客户端而切换到ActiveMQ,因为它应该与Open MQ客户端完全相同。 还有其他原因需要切换,例如不同的服务器端功能和什么不能,但你没有提到。

也就是说,有一个桥组件能够通过STOMP协议(ActiveMQ支持)暴露任何JMS服务器。

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

从那里,您应该能够与指定STOMP的ActiveMQConnection工厂连接。 但我自己并没有真正尝试过这种组合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM