我开始使用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);
}
}
现在,我如何告诉生产者消费者的行为是成功还是失败,以便生产者服务发出适当的响应?
生产者无法知道消息成功发布到主题后发生了什么。 如果您想从消费者那里得到反馈,那么您需要创建一个新的“响应”主题,消费者在该主题上交流处理该消息的成功或失败。
您可以通过键映射消息。