java - 将不同类型的事件发布到不同的队列

标签 java rabbitmq spring-amqp axon

我正在尝试创建一个简单的微服务项目来学习使用 Axon 框架。

我使用以下代码通过 RabbitMQ 设置消息传递:

@Bean
public Exchange exchange() {
    return ExchangeBuilder.fanoutExchange("Exchange").build();
}

@Bean
public Queue queue() {
    return QueueBuilder.durable("QueueA").build();
}

@Bean
public Binding binding() {
    return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs();
}

@Autowired
public void configure(AmqpAdmin admin) {
    admin.declareExchange(exchange());
    admin.declareQueue(queue());
    admin.declareBinding(binding());
}

以及我的 application.properties 中的以下内容:

axon.amqp.exchange=Exchange

使用此配置,通过 Axon 框架发布的所有事件都将发送到 QueueA。但现在我想让所有EventA事件都转到QueueA,所有EventB事件都转到QueueB。我怎样才能做到这一点?

最佳答案

默认情况下,Axon Framework 使用事件的包名称作为 AMQP 路由键。这意味着您可以使用模式将队列绑定(bind)到主题交换来匹配这些路由键。 请参阅https://www.rabbitmq.com/tutorials/tutorial-five-java.html了解更多信息。

您可以通过提供自定义 RoutingKeyResolver(一个为给定 EventMessage 返回字符串的简单函数)来自定义 Axon 的行为。然后在 AMQPMessageConverter 中进行配置,它负责基于 Axon EventMessage 创建 AMQP 消息(反之亦然)。如果您适合默认的 AMQP 消息格式,则可以使用 DefaultAMQPMessageConverter

关于java - 将不同类型的事件发布到不同的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50836979/

相关文章:

java - 将带有 @ManyToOne 的子实体删除到其他实体时出现 NullPointerException

与 java-client/spring-rabbit 进行rabbitmq-consistency-hash-exchange

spring-boot - 至少一次传递的 RabbitMQ 消息可靠性

java - 在 Android Studio 中添加外部库时出现问题

java - 从 Facebook SDK android 获取用户电子邮件

java - 如何加密桌面应用程序和基于 REST 的 Web 服务之间的通信?

python - 无法使用鼠兔连接到远程rabbitmq服务器

rabbitmq - RabbitMQ 中的过期时间

java - Spring + RabbitMQ Exponential Backoff with RetryTemplate 无响应

java - 具有不同队列的 Spring AMQP 监听器