我正在使用quarkus版本:1.5.2.Final
和以下依赖项来包含响应消息传递(我在发送者和接收者项目之间有一个正在运行的Artemis docker实例):
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-reactive-messaging-amqp</artifactId>
</dependency>
在发送方项目中,我在方法上有一个@Outgoing('stock-quote')
注释,该方法每秒产生一个随机数并返回Flowable<Message<String>>
。配置如下:
mp.messaging.outgoing.stock-quote.connector=smallrye-amqp
mp.messaging.outgoing.stock-quote.address=stocks
mp.messaging.outgoing.stock-quote.durable=true
在接收者项目上,接收者位于其中,该接收者具有带有注释@Incoming('stock)'.
的方法,其配置如下:
mp.messaging.incoming.stocks.connector=smallrye-amqp
mp.messaging.incoming.stocks.durable=true
我注意到什么?一切正常。当接收方项目由于任何原因而关闭时,仍将继续发送方仍在发送的消息,这很好。但是,当接收方再次重新联机时,接收方不会接收到保留的消息,而是从单独的“客户端线程”启动。持久的邮件只留在那里。
我也尝试在发送方添加@Broadcast
注释。由于我还希望接收者有多个实例,因此消息在接收者之间进行了划分。然后,当接收者脱机时,消息将再次保留。当接收方恢复工作时,它将接收到新消息的发送,但是持久消息仅停留在该消息中(在另一个“客户端线程”中,更糟糕的是,由于广播,该“客户端线程”中的持久消息正在累积)。
那我想要什么?我希望有一个发送邮件的发件人。这些消息被划分为两个或多个接收者实例。如果一个接收器出现故障,则其他实例将处理该消息。如果所有接收器都关闭,则消息将被保留,并且一旦有一个或多个接收器再次联机,这些保留的消息将被处理。所以基本上我想要这个:
任何人都知道如何将quarkus反应消息与artemis结合使用吗?