我有一个带有kafka绑定的spring-cloud-stream
应用程序。我想从同一个可执行文件(jar)中发送和接收来自同一主题的消息。我有我的频道定义,如下所示: -
public interface ChannelDefinition {
@Input("forum")
public SubscriableChannel readMessage();
@Output("forum")
public MessageChannel postMessage();
}
我使用@StreamListener
来接收邮件。我得到各种意想不到的错误。有时候,我会收到
是否有上述用例的工作示例?
答案 0 :(得分:9)
这是定义可绑定通道的错误方法(因为两者都使用forum
名称)。我们应该更彻底并且快速失败,但是您将输入和输出绑定到同一个通道并在应用程序中创建竞争消费者。这也解释了备用消息的另一个问题。
你应该做的是:
public interface ChannelDefinition {
@Input
public MessageChannel readMessage();
@Output
public MessageChannel postMessage();
}
然后使用应用程序属性将您的频道绑定到同一队列:
spring.cloud.stream.bindings.readMessage.destination=forum
spring.cloud.stream.bindings.postMessage.destination=forum
答案 1 :(得分:0)
除了上面的Marius Bogoevici的答案以外,这是一个如何收听该输入的示例。
@StreamListener
public void handleNewOrder(@Input("input") SubscribableChannel input) {
logger.info("Subscribing...");
input.subscribe((message) -> {
logger.info("Received new message: {}", message);
});
}