Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Apache Qpid中使用amq.topic发布/订阅消息 我有一个C++发布服务器发送这样的消息: Connection connection; connection.open("127.0.0.1", 5672); Session session = connection.createSession(); Message msg; msg.setData("TestAMsg"); msg.getDeliveryProperties().setRoutingKey("test.A"); session.messageTransfer(arg::content = message, arg::destination = "amq.topic"); msg.setData("TestBMsg"); msg.getDeliveryProperties().setRoutingKey("test.B"); session.messageTransfer(arg::content = message, arg::destination = "amq.topic"); AMQConnectionFactory connectionFactory = new AMQConnectionFactory("amqp://guest:guest@myhost/test? brokerlist='tcp://127.0.0.1:5672'"); AMQConnection connection = (AMQConnection) connectionFactory.createConnection(); org.apache.qpid.jms.Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); AMQTopic destination = (AMQTopic) AMQDestination.createDestination("topic://amq.topic//exclusive='false'? bindingkey='Test.A'"); MessageConsumer messageAConsumer = session.createConsumer(destination); Message message_ = messageConsumer_.receive();_Jms_Amqp_Qpid - Fatal编程技术网

如何在Apache Qpid中使用amq.topic发布/订阅消息 我有一个C++发布服务器发送这样的消息: Connection connection; connection.open("127.0.0.1", 5672); Session session = connection.createSession(); Message msg; msg.setData("TestAMsg"); msg.getDeliveryProperties().setRoutingKey("test.A"); session.messageTransfer(arg::content = message, arg::destination = "amq.topic"); msg.setData("TestBMsg"); msg.getDeliveryProperties().setRoutingKey("test.B"); session.messageTransfer(arg::content = message, arg::destination = "amq.topic"); AMQConnectionFactory connectionFactory = new AMQConnectionFactory("amqp://guest:guest@myhost/test? brokerlist='tcp://127.0.0.1:5672'"); AMQConnection connection = (AMQConnection) connectionFactory.createConnection(); org.apache.qpid.jms.Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); AMQTopic destination = (AMQTopic) AMQDestination.createDestination("topic://amq.topic//exclusive='false'? bindingkey='Test.A'"); MessageConsumer messageAConsumer = session.createConsumer(destination); Message message_ = messageConsumer_.receive();

如何在Apache Qpid中使用amq.topic发布/订阅消息 我有一个C++发布服务器发送这样的消息: Connection connection; connection.open("127.0.0.1", 5672); Session session = connection.createSession(); Message msg; msg.setData("TestAMsg"); msg.getDeliveryProperties().setRoutingKey("test.A"); session.messageTransfer(arg::content = message, arg::destination = "amq.topic"); msg.setData("TestBMsg"); msg.getDeliveryProperties().setRoutingKey("test.B"); session.messageTransfer(arg::content = message, arg::destination = "amq.topic"); AMQConnectionFactory connectionFactory = new AMQConnectionFactory("amqp://guest:guest@myhost/test? brokerlist='tcp://127.0.0.1:5672'"); AMQConnection connection = (AMQConnection) connectionFactory.createConnection(); org.apache.qpid.jms.Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); AMQTopic destination = (AMQTopic) AMQDestination.createDestination("topic://amq.topic//exclusive='false'? bindingkey='Test.A'"); MessageConsumer messageAConsumer = session.createConsumer(destination); Message message_ = messageConsumer_.receive();,jms,amqp,qpid,Jms,Amqp,Qpid,我有一个Java订户,如下所示: Connection connection; connection.open("127.0.0.1", 5672); Session session = connection.createSession(); Message msg; msg.setData("TestAMsg"); msg.getDeliveryProperties().setRoutingKey("test.A"); session.messageTransfer(arg::content

我有一个Java订户,如下所示:

Connection connection;
connection.open("127.0.0.1", 5672);
Session session = connection.createSession();
Message msg;
msg.setData("TestAMsg");
msg.getDeliveryProperties().setRoutingKey("test.A");
session.messageTransfer(arg::content = message, 
                         arg::destination = "amq.topic");
msg.setData("TestBMsg");
msg.getDeliveryProperties().setRoutingKey("test.B");
session.messageTransfer(arg::content = message, 
                         arg::destination = "amq.topic");
AMQConnectionFactory connectionFactory = new 
                AMQConnectionFactory("amqp://guest:guest@myhost/test?
                                     brokerlist='tcp://127.0.0.1:5672'");
AMQConnection connection = (AMQConnection) 
                             connectionFactory.createConnection();
org.apache.qpid.jms.Session session = connection.createSession(false, 
                                             Session.AUTO_ACKNOWLEDGE);
AMQTopic destination = (AMQTopic) 
        AMQDestination.createDestination("topic://amq.topic//exclusive='false'?
                                          bindingkey='Test.A'");
MessageConsumer messageAConsumer = session.createConsumer(destination);
Message message_ = messageConsumer_.receive();

在上述代码中未收到任何消息。我很困惑这将如何工作?对于消费者来说,Binding URL的正确形式是什么?我缺少什么?

您的使用者指定的绑定密钥与生产者使用的路由密钥不同

您的生产商代码:

msg.getDeliveryProperties().setRoutingKey("test.A");
您的消费代码:

AMQTopic destination = (AMQTopic) 
        AMQDestination.createDestination("topic://amq.topic//exclusive='false'?
                                          bindingkey='Test.A'");

请注意每个键的第一个字符的大小写差异。您的制作人使用
test.A
,而您的消费者使用
test.A
,并且由于密钥区分大小写,因此认为它们完全不同。这就是为什么您的制作人不会收到任何消息。

您的绑定密钥应该是test。#或test*


#和*之间的差异,请点击此链接

您也可以使用精确匹配的绑定键,请参见@Brian Kelly answer