redisQueueInboundGateway.setReplyChannelName 有什么用
What is it for redisQueueInboundGateway.setReplyChannelName
只想问redisQueueInboundGateway.setReplyChannelName是什么
我得到了一个log B,然后是一个log。
1.My问题是我设置到RedisQueueInboundGateway后在什么情况下会打印log C
- “https://docs.spring.io/spring-integration/reference/html/redis.html#redis-queue-inbound-gateway”中的文档对于 class 名称和 class 解释如:
2.1 'RedisOutboundChannelAdapter' 被命名为 'RedisPublishingMessageHandler'.
2.2 'RedisQueueOutboundChannelAdapter' 被命名为 'RedisQueueMessageDrivenEndpoint'.
2.3 Redis Queue Outbound Gateway的解释就是Redis Queue Inbound Gateway的翻版
@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;
}
您的问题不明确。
2.1
有一个组件(模式名称),背景上有一个 class 覆盖逻辑。
有时它们不一样。
所以,Redis Outbound Channel Adapter
被 RedisPublishingMessageHandler
覆盖了,只是因为有一个 ConsumerEndpointFactoryBean
来消费来自输入通道的消息和 RedisPublishingMessageHandler
来处理它们。换句话说,框架创建了两个 bean 来使这样的 Redis 交互工作。事实上,所有出站通道适配器(网关)的处理方式相同:端点加处理程序。根据交互的类型,它们一起被称为 adapter
或 gateway
。
2.2
我在文档中没有看到这样的误导。
2.3
事实并非如此。
查看差异:
Spring Integration introduced the Redis queue outbound gateway to perform request and reply scenarios. It pushes a conversation UUID to the provided queue,
Spring Integration 4.1 introduced the Redis queue inbound gateway to perform request and reply scenarios. It pops a conversation UUID from the provided queue
所有入站网关都提供了一个可选的 replyChannel
来跟踪回复。它不是这种类型的网关要发送东西的地方。它完全相反:此入站网关将采用回复通道将回复消息发送到 Redis 的地方。 Inbound 网关是在外部启动的。在我们的例子中,作为配置的 Redis 列表中的请求消息。当您的集成流完成其工作时,它会向此网关发送一条回复消息。在大多数情况下,它是使用消息中的 replyChannel
header 自动完成的。但是,如果您想跟踪该回复,您可以在入站网关上添加一个 PublishSubscribeChannel
作为 replyChannel
选项,并且您的服务激活器和网关都会收到相同的消息。
replyChannel
选项背后的行为在消息网关章节中进行了解释: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 入站网关创建回复关联,它有成为 PublishSubscribeChannel
。否则只需省略它,您的 String bTesting(Message message) {
会将其结果发送到 replyChannel
header.
只想问redisQueueInboundGateway.setReplyChannelName是什么
我得到了一个log B,然后是一个log。
1.My问题是我设置到RedisQueueInboundGateway后在什么情况下会打印log C
- “https://docs.spring.io/spring-integration/reference/html/redis.html#redis-queue-inbound-gateway”中的文档对于 class 名称和 class 解释如:
2.1 'RedisOutboundChannelAdapter' 被命名为 'RedisPublishingMessageHandler'.
2.2 'RedisQueueOutboundChannelAdapter' 被命名为 'RedisQueueMessageDrivenEndpoint'.
2.3 Redis Queue Outbound Gateway的解释就是Redis Queue Inbound Gateway的翻版
@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;
}
您的问题不明确。
2.1
有一个组件(模式名称),背景上有一个 class 覆盖逻辑。 有时它们不一样。
所以,Redis Outbound Channel Adapter
被 RedisPublishingMessageHandler
覆盖了,只是因为有一个 ConsumerEndpointFactoryBean
来消费来自输入通道的消息和 RedisPublishingMessageHandler
来处理它们。换句话说,框架创建了两个 bean 来使这样的 Redis 交互工作。事实上,所有出站通道适配器(网关)的处理方式相同:端点加处理程序。根据交互的类型,它们一起被称为 adapter
或 gateway
。
2.2
我在文档中没有看到这样的误导。
2.3
事实并非如此。 查看差异:
Spring Integration introduced the Redis queue outbound gateway to perform request and reply scenarios. It pushes a conversation UUID to the provided queue,
Spring Integration 4.1 introduced the Redis queue inbound gateway to perform request and reply scenarios. It pops a conversation UUID from the provided queue
所有入站网关都提供了一个可选的 replyChannel
来跟踪回复。它不是这种类型的网关要发送东西的地方。它完全相反:此入站网关将采用回复通道将回复消息发送到 Redis 的地方。 Inbound 网关是在外部启动的。在我们的例子中,作为配置的 Redis 列表中的请求消息。当您的集成流完成其工作时,它会向此网关发送一条回复消息。在大多数情况下,它是使用消息中的 replyChannel
header 自动完成的。但是,如果您想跟踪该回复,您可以在入站网关上添加一个 PublishSubscribeChannel
作为 replyChannel
选项,并且您的服务激活器和网关都会收到相同的消息。
replyChannel
选项背后的行为在消息网关章节中进行了解释: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 入站网关创建回复关联,它有成为 PublishSubscribeChannel
。否则只需省略它,您的 String bTesting(Message message) {
会将其结果发送到 replyChannel
header.