提问者:小点点

如何在服务失败时以saga模式回滚


我开始使用spring cloud和兔子MQ的Saga模式。 下面是问题陈述:我调用/service1(producter),它在rabbit mq中发布消息,该消息由消费者服务使用。

现在出现两种情况:

案例1:消费者服务成功地完成了自己的职责。

情况2:使用者服务没有尽到自己的责任,因此/service1必须回滚它的更改。

/service1如何知道消费者是否成功,以便发送成功/失败响应。 项目结构如下:

制作人:

    @RestController
    public class ProducerController {
        
        private MessageChannel greet;
        
        public ProducerController(HelloBinding binding) {
            greet = binding.greeting();
        }
        
        @GetMapping("/greet/{name}")
        public void publish(@PathVariable String name) {
            String greeting = "Hello, "+name+"!";
            Message<String> msg = MessageBuilder.withPayload(greeting)
                                                .build();
            this.greet.send(msg);
            System.out.println("Message sent to the queue");
            AMQP.Basic.Ack;
            
}

消费者:

@EnableBinding(HelloBinding.class)
public class HelloListener {
    
    @StreamListener(target=HelloBinding.GREETING)
    public void processHelloChannelGreeting(String msg) {
        System.out.println("Message received:- "+msg);
    }

}

现在,我如何告诉生产者消费者的行为是成功还是失败,以便生产者服务发出适当的响应?


共1个答案

匿名用户

生产者无法知道消息成功发布到主题后发生了什么。 如果您想从消费者那里得到反馈,那么您需要创建一个新的“响应”主题,消费者在该主题上交流处理该消息的成功或失败。

您可以通过键映射消息。