我正在運行Apache Artemis經紀人版本1.1.0。Apache Artemis經紀人不發送消息給SwiftMQ AMQP客戶端
我使用這樣的SwiftMQ客戶端創建一個會話。
AMQPContext ctx = new AMQPContext(AMQPContext.CLIENT);
Connection connection = new Connection(ctx, getBrokerHost(), getBrokerPort(), getUserName(), getPassword());
connection.setExceptionListener((exc) -> log().error(exc, "Problem with AMQP connection to {}", getBrokerHost()));
connection.connect();
// Parameters are maximum number of unsettled input and output messages
session = connection.createSession(50, 50);
在一個過程中,我創建由
session.createProducer(queueName, QoS.AT_LEAST_ONCE)
生產者在單獨的過程中,我創建一個消費者通過
session.createProducer(queueName, QoS.AT_LEAST_ONCE)
隨着生產者,我可以由
發送消息AMQPMessage result = new AMQPMessage();
result.setAmqpValue(new AmqpValue(new AMQPString(value)));
producer.send(result);
This works。使用JMX,我可以看到隊列中有消息。當我嘗試通過
AMQPMessage message = consumer.receive();
或
AMQPMessage message = consumer.receiveNoWait(listener);
讀他們在那裏listener
將消息發送到讀線程調用receive
S的一個,電話要麼塊或沒有返回信息,根據在版本上。
JMX顯示代理認爲隊列中有消費者,隊列中有消息。消息未在交付時列出,並且隊列未暫停。隊列中沒有過濾器。
如果重要,消費者和生產者在同一主機上運行。該代理正在與生產者和使用者相同的主機上運行於Docker容器中(假設您不知道Docker,請考慮VM),但它具有不同的IP地址。
我加了consumer.setLinkCredit(100)
,但是這並沒有影響任何東西。
可能會有一些Artemis/SwiftMQ不兼容,但這似乎不太可能,因爲我可以發送消息給代理。
經紀人幾乎是一個標準的經紀人。它創建於
/opt/apache-artemis-1.1.0/bin/artemis create artemis \
--home /opt/apache-artemis \
--user xxx \
--password yyy \
--cluster-user www \
--cluster-password zzz \
--allow-anonymous
第二個用戶,角色amq
已被添加。預定義了兩個持久隊列。其中之一就是這裏使用的隊列。
是否有可能無法傳遞消息的原因?還有什麼我可以有用地檢查,以瞭解爲什麼這不起作用?
編輯
我試圖與幾個不同的隊列名稱。
- frobGetter
- frobRequest
- jms.queue.ExpiryQueue
- jms.queue.DLQ
- jms.queue。PlanningQueue
這些名字都不起作用。
你有什麼作爲queueName? –