只想问一下redisQueueInboundGateway.setReplyChannelName是什么
我得到了一条日志B,然后是一条日志。
1。我的问题是,在将日志C设置为RedisQueueInboundGateway时,它将在什么情况下打印?
2.1'RedisOutboundChannelAdapter'在'RedisPublishingMessageHandler'中命名。
2.2'RedisQueueOutboundChannelAdapter'在'RedisQueueMessageDrivenEndpoint'中命名。
2.3 Redis队列出站网关的解释完全是Redis队列入站网关的副本。
@GetMapping("test")
public void test() {
this.teller.test("testing 1");
@Gateway(requestChannel = "inputA")
void test(String transaction);
@Bean("A")
PublishSubscribeChannel getA() {
return new PublishSubscribeChannel();
}
@Bean("B")
PublishSubscribeChannel getB() {
return new PublishSubscribeChannel();
}
@Bean("C")
PublishSubscribeChannel getC() {
return new PublishSubscribeChannel();
}
@ServiceActivator(inputChannel = "A")
void aTesting(Message message) {
System.out.println("A");
System.out.println(message);
}
@ServiceActivator(inputChannel = "B")
String bTesting(Message message) {
System.out.println("B");
System.out.println(message);
return message.getPayload() + "Basdfasdfasdfadsfasdf";
}
@ServiceActivator(inputChannel = "C")
void cTesting(Message message) {
System.out.println("C");
System.out.println(message);
}
@ServiceActivator(inputChannel = "inputA")
@Bean
RedisQueueOutboundGateway getRedisQueueOutboundGateway(RedisConnectionFactory connectionFactory) {
val redisQueueOutboundGateway = new RedisQueueOutboundGateway(Teller.CHANNEL_CREATE_INVOICE, connectionFactory);
redisQueueOutboundGateway.setReceiveTimeout(5);
redisQueueOutboundGateway.setOutputChannelName("A");
redisQueueOutboundGateway.setSerializer(new GenericJackson2JsonRedisSerializer(new ObjectMapper()));
return redisQueueOutboundGateway;
}
@Bean
RedisQueueInboundGateway getRedisQueueInboundGateway(RedisConnectionFactory connectionFactory) {
val redisQueueInboundGateway = new RedisQueueInboundGateway(Teller.CHANNEL_CREATE_INVOICE, connectionFactory);
redisQueueInboundGateway.setReceiveTimeout(5);
redisQueueInboundGateway.setRequestChannelName("B");
redisQueueInboundGateway.setReplyChannelName("C");
redisQueueInboundGateway.setSerializer(new GenericJackson2JsonRedisSerializer(new ObjectMapper()));
return redisQueueInboundGateway;
}
答案 0 :(得分:0)
您的担忧不清楚。
2.1
有一个组件(模式名称),并且在后台有一个类涵盖了逻辑。 有时候它们不一样。
因此,Redis Outbound Channel Adapter
被RedisPublishingMessageHandler
覆盖,只是因为有一个ConsumerEndpointFactoryBean
消耗了来自输入通道的消息,还有RedisPublishingMessageHandler
来处理它们。换句话说,框架创建了两个bean来使这种Redis交互起作用。实际上,所有出站通道适配器(网关)的处理方式都相同:端点加处理程序。根据交互的类型,它们一起称为adapter
或gateway
。
2.2
我没有在文档中看到这样的误导。
2.3
那不是事实。 查看差异:
Spring Integration引入了Redis队列出站网关,以执行请求和答复方案。它将会话UUID推送到提供的队列中,
Spring Integration 4.1引入了Redis队列入站网关,以执行请求和答复方案。它从提供的队列中弹出一个对话UUID
所有入站网关都提供了可选的replyChannel
来跟踪答复。这类网关不是要发送东西的地方。完全相反:此入站网关将使用回复通道将回复消息发送回Redis的地方。入站网关是从外部启动的。在我们的情况下,作为已配置的Redis列表中的请求消息。当Integration flow完成其工作时,它将向该网关发送回复消息。在大多数情况下,它是使用邮件中的replyChannel
标头自动完成的。但是,如果您想跟踪该答复,请在入站网关上添加一个PublishSubscribeChannel
作为该replyChannel
选项,并且服务激活器和网关都将收到相同的消息。
此消息replyChannel
背后的行为在Messaging Gateway一章中进行了说明:https://docs.spring.io/spring-integration/reference/html/messaging-endpoints.html#gateway-default-reply-channel
您可能对文档https://docs.spring.io/spring-integration/reference/html/redis.html#redis-queue-inbound-gateway中的此部分正确,而那些requestChannel
和replyChannel
实际上是“出站网关”部分中文本的副本。那必须解决。随时提出GH问题,这样我们就不会忘记解决它。
当您向该C
通道发送消息时,将打印C日志,但是再次:如果您想使Redis入站网关的回复相关性有效,则必须以{{ 1}}。否则,只需忽略它,您的PublishSubscribeChannel
就会将其结果发送到String bTesting(Message message) {
标头。