当前位置: 首页 > 知识库问答 >
问题:

axon 3通过RabbitMQ分离命令和查询服务:json vs.xml

辛意智
2023-03-14
@Bean
RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
  final RabbitTemplate rabbitTemplate = new  RabbitTemplate(connectionFactory);
  rabbitTemplate.setMessageConverter(converter);
  return rabbitTemplate;
}

@Bean
Jackson2JsonMessageConverter producerJackson2MessageConverter() {
  return new Jackson2JsonMessageConverter();
}

这是有效的,当我将命令发送到命令服务时,我可以检查RabbitMQ队列中正确的JSON格式。

我的聚合接收命令和触发器事件,它们正确地存储在mySQL-EventStore中。在这里,事件是xml格式的。

现在来了棘手的部分。我使用axon-springboot通过属性再次将事件发送到rabbit队列:

axon.amqp.exchange: my-event-exchange
@Bean
public SpringAMQPMessageSource myMessageSource(Serializer serializer, EventHandlingConfiguration ehConfig) {
   return new SpringAMQPMessageSource(serializer) {
      @RabbitListener(queues = "my-event-queue")
      @Override
      public void onMessage(Message message, Channel channel) throws Exception {
           log.info("receiving event: {}#{}", message, channel);
           super.onMessage(message, channel);
      }
    };
   }

   @Autowired
   public void configure(EventHandlingConfiguration ehConfig, SpringAMQPMessageSource myMessageSource) {
     ehConfig.registerSubscribingEventProcessor(
          "taskQueryObjectUpdater", c -> myMessageSource);
   }
2017-06-16 15:17:38.168  WARN 69212 --- [cTaskExecutor-1] o.s.a.s.c.Jackson2JsonMessageConverter   : Could not convert incoming message with content-type [null]

警告,并且从未调用我的h2-repository-service。

我担心我为rabbit配置的json转换器和axon中的xml事件处理会干扰...或者我走错路了?如何通过rabbit正确地分离命令和查询服务,以及eventProcessor的名称有什么用处?我使用了处理eventstream的spring bean的bean名称...

共有1个答案

子车才捷
2023-03-14

您的配置中的两种方法似乎相互冲突。自动配置使用没有特定类型的bean来定义默认值。但是,如果您定义了一个预期类型的bean(即使用于不同的目的),那么该bean将被使用。

Axon使用Spring的AMQP自动配置来读取消息。如果您指定要以特定的方式转换消息,那么Axon也将间接地使用该方式。

解决办法可以是不将Jackson2JsonMessageConverter定义为bean。我怀疑MessageListenerContainer(Spring用来调用@RabbitListener方法)是否使用RabbitTemplate,但我几乎可以肯定它将使用应用程序上下文中定义的任何MessageConverter。

 类似资料:
  • 问题内容: 我有一个成员对成员连接表。模式为member_id,friend_id,is_active。我想建立一个成为朋友朋友的成员的成员关系列表。我不太确定如何解决该查询,更不用说以半优化的方式了。 上表的工作方式是,member_id和friend_id在另一张表上本质上是同一件事。在我的系统中,除此一张表外,这些ID通常称为member_id。例如,假设我的member_id是21。我的号

  • 本文向大家介绍通过什么命令查找执行命令?相关面试题,主要包含被问及通过什么命令查找执行命令?时的应答技巧和注意事项,需要的朋友参考一下 答案: which 只能查可执行文件 whereis 只能查二进制文件、说明文档,源文件等  

  • 问题内容: 我不知道如何通过JSch Shell通道发送命令。 我这样做,但是不起作用: 然后我读这样的输入: 问题答案: 如果挂起,则意味着您的“ while”永远不会结束(考虑您的代码可能不太可能),或者正在等待其“源”,即线程原因造成的阻塞。 如果没有看到调试信息,我就无法对您的代码进行故障排除。但是作为建议,您尝试过吗?这个想法是将控制台输入传递到“您的”输出,以便您可以“编写”它。为此,

  • 问题内容: 我试图通过这样的本地服务器上的ssh命令在远程linux服务器上执行命令: ssh myremoteserver’类型ttisql’ 其中ttisql是我的远程计算机路径上的可执行文件。 运行此命令的结果是: bash:第0行:类型:ttisql:未找到 当我只是先连接并执行以下操作: ssh myremoteserver 然后输入命令: [myuser @ myremoteserve

  • 我正在尝试设置一个类,以便我可以通过ssh连接到远程服务器(我有IP、用户名和密码),然后发送类似“echo”test“”的命令,然后接收回输出(例如,“test”)。我用JSch来做这个,但我不知道怎么做。 我不知道该怎么办,连接后我卡住了。 非常感谢您的建议。

  • DetachedCriteria 类使你在一个 session 范围之外创建一个查询,并且可以使用任意的 Session 来执行它。 DetachedCriteria query = DetachedCriteria.forClass(Cat.class) .add( Property.forName("sex").eq('F') ); Session session = ...