Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Axon消息接收但事件处理程序未调用_Java_Spring Boot_Rabbitmq_Axon - Fatal编程技术网

Java Axon消息接收但事件处理程序未调用

Java Axon消息接收但事件处理程序未调用,java,spring-boot,rabbitmq,axon,Java,Spring Boot,Rabbitmq,Axon,Axon消息接收,但事件处理程序未调用。 我正在尝试用两个不同的队列在两侧实现事件源。 我的第一个队列是test,第二个队列是testdemo 我有两个独立的应用程序在同一台服务器上运行 用户管理 钱包管理 我已经实现了从用户管理到钱包管理的活动来源。它工作得很好 现在我正在尝试将wallet management实现为UserManagement,这意味着我将在何时从wallet management(制作人)发布事件 和(使用)用户管理应用程序。因此,接收事件,但不调用事件处理程序 下面是我

Axon消息接收,但事件处理程序未调用。

我正在尝试用两个不同的队列在两侧实现事件源。 我的第一个队列是test,第二个队列是testdemo

我有两个独立的应用程序在同一台服务器上运行

  • 用户管理
  • 钱包管理
  • 我已经实现了从用户管理到钱包管理的活动来源。它工作得很好

    现在我正在尝试将wallet management实现为UserManagement,这意味着我将在何时从wallet management(制作人)发布事件 和(使用)用户管理应用程序。因此,接收事件,但不调用事件处理程序

    下面是我的申请代码。请帮我弄清楚我会错过什么

    我的轴突配置类

    package com.peaas.ngapblueprintdemo.config;
    
    import org.axonframework.amqp.eventhandling.DefaultAMQPMessageConverter;
    import org.axonframework.amqp.eventhandling.spring.SpringAMQPMessageSource;
    import org.axonframework.serialization.Serializer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.Exchange;
    import org.springframework.amqp.core.ExchangeBuilder;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.core.QueueBuilder;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.rabbitmq.client.Channel;
    
    @Configuration
    public class AxonConfiguration {
    
        private final static Logger logger = LoggerFactory.getLogger(AxonConfiguration.class);
    
        @Value("${axon.amqp.exchange}")
        private String exchange;
    
        @Bean
        public Exchange exchange() {
            logger.info(exchange + " AMQP Exchange Registering ");
            return ExchangeBuilder.fanoutExchange(exchange).build();
        }
    
        @Bean
        public Queue queue() {
            return QueueBuilder.durable(exchange).build();
        }
    
        @Bean
        public Binding binding() {
            return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs();
        }
    
        @Autowired
        public void configure(AmqpAdmin amqpAdmin) {
            amqpAdmin.declareExchange(exchange());
            amqpAdmin.declareQueue(queue());
            amqpAdmin.declareBinding(binding());
        }   
    
        @Bean
        public SpringAMQPMessageSource testdemo(Serializer serializer) {
            System.out.println("--- On Message Call ---");
            return new SpringAMQPMessageSource(new DefaultAMQPMessageConverter(serializer)) {
    
                @RabbitListener(queues = "testdemo")
    
                @Override
                public void onMessage(Message message, Channel channel) throws Exception {
                    System.out.println(message.getMessageProperties());
                    System.out.println("channel == "+channel);
                    super.onMessage(message, channel);
                }
            };
        }
    }
    
    package com.peaas.ngapblueprintdemo.events;
    
    public class WalletCreatedEvent {
        private Long id;
        private String walletId;
        private Double amount;
        private Long userId;
    
        public WalletCreatedEvent(Long id, String walletId, Double amount, Long userId) {       
            super();
            System.out.println("--- call ---");
            this.id = id;
            this.walletId = walletId;
            this.amount = amount;
            this.userId = userId;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public Double getAmount() {
            return amount;
        }
    
        public void setAmount(Double amount) {
            this.amount = amount;
        }
    
        public Long getUserId() {
            return userId;
        }
    
        public void setUserId(Long userId) {
            this.userId = userId;
        }
    
        public String getWalletId() {
            return walletId;
        }
    
        public void setWalletId(String walletId) {
            this.walletId = walletId;
        }
    
        @Override
        public String toString() {
            return "WalletCreatedEvent [id=" + id + ", walletId=" + walletId + ", amount=" + amount + ", userId=" + userId
                    + "]";
        }
    
    }
    
    package com.peaas.ngapblueprintdemo.eventHandlers;
    
    import org.axonframework.eventhandling.EventHandler;
    import org.springframework.stereotype.Component;
    
    import com.peaas.ngapblueprintdemo.events.WalletCreatedEvent;
    
    @Component
    public class UserEventHandler {
    
        @EventHandler
        public void onCreateWalletEvent(WalletCreatedEvent event) {
            System.out.println("--- Wallet Created Successfully ---");
            System.out.println(event);
        }   
    }
    
    WalletCreatedEvent类

    package com.peaas.ngapblueprintdemo.config;
    
    import org.axonframework.amqp.eventhandling.DefaultAMQPMessageConverter;
    import org.axonframework.amqp.eventhandling.spring.SpringAMQPMessageSource;
    import org.axonframework.serialization.Serializer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.Exchange;
    import org.springframework.amqp.core.ExchangeBuilder;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.core.QueueBuilder;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.rabbitmq.client.Channel;
    
    @Configuration
    public class AxonConfiguration {
    
        private final static Logger logger = LoggerFactory.getLogger(AxonConfiguration.class);
    
        @Value("${axon.amqp.exchange}")
        private String exchange;
    
        @Bean
        public Exchange exchange() {
            logger.info(exchange + " AMQP Exchange Registering ");
            return ExchangeBuilder.fanoutExchange(exchange).build();
        }
    
        @Bean
        public Queue queue() {
            return QueueBuilder.durable(exchange).build();
        }
    
        @Bean
        public Binding binding() {
            return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs();
        }
    
        @Autowired
        public void configure(AmqpAdmin amqpAdmin) {
            amqpAdmin.declareExchange(exchange());
            amqpAdmin.declareQueue(queue());
            amqpAdmin.declareBinding(binding());
        }   
    
        @Bean
        public SpringAMQPMessageSource testdemo(Serializer serializer) {
            System.out.println("--- On Message Call ---");
            return new SpringAMQPMessageSource(new DefaultAMQPMessageConverter(serializer)) {
    
                @RabbitListener(queues = "testdemo")
    
                @Override
                public void onMessage(Message message, Channel channel) throws Exception {
                    System.out.println(message.getMessageProperties());
                    System.out.println("channel == "+channel);
                    super.onMessage(message, channel);
                }
            };
        }
    }
    
    package com.peaas.ngapblueprintdemo.events;
    
    public class WalletCreatedEvent {
        private Long id;
        private String walletId;
        private Double amount;
        private Long userId;
    
        public WalletCreatedEvent(Long id, String walletId, Double amount, Long userId) {       
            super();
            System.out.println("--- call ---");
            this.id = id;
            this.walletId = walletId;
            this.amount = amount;
            this.userId = userId;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public Double getAmount() {
            return amount;
        }
    
        public void setAmount(Double amount) {
            this.amount = amount;
        }
    
        public Long getUserId() {
            return userId;
        }
    
        public void setUserId(Long userId) {
            this.userId = userId;
        }
    
        public String getWalletId() {
            return walletId;
        }
    
        public void setWalletId(String walletId) {
            this.walletId = walletId;
        }
    
        @Override
        public String toString() {
            return "WalletCreatedEvent [id=" + id + ", walletId=" + walletId + ", amount=" + amount + ", userId=" + userId
                    + "]";
        }
    
    }
    
    package com.peaas.ngapblueprintdemo.eventHandlers;
    
    import org.axonframework.eventhandling.EventHandler;
    import org.springframework.stereotype.Component;
    
    import com.peaas.ngapblueprintdemo.events.WalletCreatedEvent;
    
    @Component
    public class UserEventHandler {
    
        @EventHandler
        public void onCreateWalletEvent(WalletCreatedEvent event) {
            System.out.println("--- Wallet Created Successfully ---");
            System.out.println(event);
        }   
    }
    
    EventHandler类

    package com.peaas.ngapblueprintdemo.config;
    
    import org.axonframework.amqp.eventhandling.DefaultAMQPMessageConverter;
    import org.axonframework.amqp.eventhandling.spring.SpringAMQPMessageSource;
    import org.axonframework.serialization.Serializer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.Exchange;
    import org.springframework.amqp.core.ExchangeBuilder;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.core.QueueBuilder;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.rabbitmq.client.Channel;
    
    @Configuration
    public class AxonConfiguration {
    
        private final static Logger logger = LoggerFactory.getLogger(AxonConfiguration.class);
    
        @Value("${axon.amqp.exchange}")
        private String exchange;
    
        @Bean
        public Exchange exchange() {
            logger.info(exchange + " AMQP Exchange Registering ");
            return ExchangeBuilder.fanoutExchange(exchange).build();
        }
    
        @Bean
        public Queue queue() {
            return QueueBuilder.durable(exchange).build();
        }
    
        @Bean
        public Binding binding() {
            return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs();
        }
    
        @Autowired
        public void configure(AmqpAdmin amqpAdmin) {
            amqpAdmin.declareExchange(exchange());
            amqpAdmin.declareQueue(queue());
            amqpAdmin.declareBinding(binding());
        }   
    
        @Bean
        public SpringAMQPMessageSource testdemo(Serializer serializer) {
            System.out.println("--- On Message Call ---");
            return new SpringAMQPMessageSource(new DefaultAMQPMessageConverter(serializer)) {
    
                @RabbitListener(queues = "testdemo")
    
                @Override
                public void onMessage(Message message, Channel channel) throws Exception {
                    System.out.println(message.getMessageProperties());
                    System.out.println("channel == "+channel);
                    super.onMessage(message, channel);
                }
            };
        }
    }
    
    package com.peaas.ngapblueprintdemo.events;
    
    public class WalletCreatedEvent {
        private Long id;
        private String walletId;
        private Double amount;
        private Long userId;
    
        public WalletCreatedEvent(Long id, String walletId, Double amount, Long userId) {       
            super();
            System.out.println("--- call ---");
            this.id = id;
            this.walletId = walletId;
            this.amount = amount;
            this.userId = userId;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public Double getAmount() {
            return amount;
        }
    
        public void setAmount(Double amount) {
            this.amount = amount;
        }
    
        public Long getUserId() {
            return userId;
        }
    
        public void setUserId(Long userId) {
            this.userId = userId;
        }
    
        public String getWalletId() {
            return walletId;
        }
    
        public void setWalletId(String walletId) {
            this.walletId = walletId;
        }
    
        @Override
        public String toString() {
            return "WalletCreatedEvent [id=" + id + ", walletId=" + walletId + ", amount=" + amount + ", userId=" + userId
                    + "]";
        }
    
    }
    
    package com.peaas.ngapblueprintdemo.eventHandlers;
    
    import org.axonframework.eventhandling.EventHandler;
    import org.springframework.stereotype.Component;
    
    import com.peaas.ngapblueprintdemo.events.WalletCreatedEvent;
    
    @Component
    public class UserEventHandler {
    
        @EventHandler
        public void onCreateWalletEvent(WalletCreatedEvent event) {
            System.out.println("--- Wallet Created Successfully ---");
            System.out.println(event);
        }   
    }
    
    以下是我的application.yml文件属性

    axon:
        amqp:
            exchange: test
        eventhandling:
            processors:
                amqpEvents:
                    source: testdemo
    
    以下是我收到的显示事件的日志数据

    MessageProperties [headers={axon-message-id=fa60968c-6905-46b5-8afe-6da853a4c51a, axon-message-aggregate-seq=0, axon-metadata-correlationId=589ef284-176f-49b8-aae0-0ad1588fa735, axon-message-aggregate-type=WalletAggregate, axon-message-revision=null, axon-message-timestamp=2018-08-06T11:09:26.345Z, axon-message-type=com.peaas.ngapblueprintdemo.events.WalletCreatedEvent, axon-metadata-traceId=589ef284-176f-49b8-aae0-0ad1588fa735, axon-message-aggregate-id=9524f7df-44fb-477f-83b8-d176583a126e}, contentLength=0, receivedDeliveryMode=PERSISTENT, redelivered=false, receivedExchange=testdemo, receivedRoutingKey=com.peaas.ngapblueprintdemo.events, deliveryTag=1, consumerTag=amq.ctag-fGm3jQcP_JIoTGf4ZMhAIg, consumerQueue=testdemo]
    channel == Cached Rabbit Channel: AMQChannel(amqp://guest@127.0.0.1:5672/,1), conn: Proxy@3dcd657d Shared Rabbit Connection: SimpleConnection@19b12fd2 [delegate=amqp://guest@127.0.0.1:5672/, localPort= 52963]
    

    您已经准备好了大部分正确的配置,但是您忘记了将
    SpringAMQPMessageSource
    绑定到事件处理器上,事件处理组件位于该处理器下

    有关如何达到此目的的正确示例,请参见

    以下是该参考指南中的一个直接片段,用于将消息源配置为事件处理器:

    @Autowired
    public void configure(EventHandlingConfiguration ehConfig, SpringAmqpMessageSource myMessageSource) {
    ehConfig.registerSubscribingEventProcessor("myProcessor", c -> myMessageSource);
    }
    
    编辑

    我想我看到了你失踪的地方。 您没有将队列作为可订阅消息源正确连接到事件处理器。下面是您的
    application.yml
    ,它将
    testdemo
    消息源绑定到
    amqpEvents
    事件处理器。因此,很抱歉我先前在这方面的假设

    之所以在
    UserEventHandler
    中不接收事件,是因为该事件处理程序未绑定到
    amqpEvents
    事件处理器。
    为了解决这个问题,您应该将
    @ProcessingGroup(“amqpEvents”)
    注释添加到
    UserEventHandler
    组件中。

    我尝试了相同的配置,但仍然存在相同的问题。我建议您提供一个片段,说明如何订阅
    订阅事件处理器,通过更新您的原始记录单,以便我能够找出您缺少的内容。嘿@Steven我有相同的配置,并将SagaConfiguration与我的SpringAMQPMessageSource绑定,但不是SagaEventHandler Eventhandler在听它。@TGW我不确定是否理解您的问题或陈述。你是说它对你有效,还是说它现在对你无效?好吧,实际上这是一个传奇,它发布了被其他服务使用的事件,然后返回成功确认事件,但理想情况下,这个事件应该在sagaeventhandler中处理,以结束传奇。但是它只被普通的事件处理程序监听,而不是@Sagaeventhandler