我一直在弄乱RabbitMQ,遇到了一个特殊的问题,那就是将消息从使用者的回调发送到通道。虽然我可以很好地确认消息,但是尝试将消息发布到频道并没有任何作用。
下面是一个示例:
// Stuff here...
final Connection connection = connectionFactory.newConnection();
final Channel channel = connection.createChannel();
channel.basicQos(16);
channel.basicConsume("transcoding", false, "someConsumerTag", new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
executorService.submit(() -> {
TestClass testClass = new TestClass();
testClass.addObserver((o, arg) -> {
// And stuff here...
channel.basicAck(envelope.getDeliveryTag(), true);
channel.basicPublish("", "notification", null, "message");
});
testClass.run();
})
}
});
如图所示,我正在使用ExecutoreService
在单独的线程上处理消息。我有一个实现Runnable
并扩展Observable
的类。 TestClass
完成工作后,将通知观察者,我将手动确认该消息。效果很好。
我现在想发布一条新消息,但是RabbitMQ从未收到过发布的消息。我尝试创建一个新渠道并将其用于发布,但这也不起作用。接下来,我认为这可能是线程问题,但是在单独的线程上发布也不起作用。
我打算尝试为发布创建单独的RabbitMQ连接,但这对我来说意义不大,因为通道应该是单向的。我已经阅读了RabbitMQ的并发说明,但看不到任何突出的内容。
我想念什么?
答案 0 :(得分:0)
因此,事实证明,问题出在消息有效负载上。顺便说一句,此后我创建了两个单独的渠道-一个用于消费者,另一个用于生产者。