gpt4 book ai didi

java - 如何在 Spring-Integration 中使用相同的 MessageChannel 进行发送和接收?

转载 作者:行者123 更新时间:2023-12-02 13:09:11 25 4
gpt4 key购买 nike

我正在创建一个连接到服务器套接字的客户端。服务器直接回复并自行关闭套接字。

以下代码通常有效。意思是:我可以看到打印到控制台的输出。

@Service
public class MyService {
@Autowired
@Qualifier("clientChannel")
private MessageChannel clientChannel;

public void send() {
Message<?> msg = MessageBuilder.withPayload("test\n").build();
Message<?> rsp = new MessagingTemplate(clientChannel).sendAndReceive(msg);
}
}


@Component
public class MyConfig {
@Bean
public AbstractClientConnectionFactory clientFactory() throws Exception {
TcpConnectionFactoryFactoryBean f = new TcpConnectionFactoryFactoryBean();
f.setType("client");
f.setHost(host);
f.setPort(port);
f.setUsingNio(true);
f.setSingleUse(true);
f.setSoTimeout(timeout);
f.setDeserializer(new ByteArrayRawSerializer());
return fact;
}

@Bean
@ServiceActivator(inputChannel = "clientChannel")
public TcpOutboundGateway outGateway(AbstractClientConnectionFactory factory,
@Qualifier("replayChannel") MessageChannel chan) throws Exception {
TcpOutboundGateway g = new TcpOutboundGateway();
g.setConnectionFactory(factory);
g.setReplyChannel(chan);
return g;
}


@ServiceActivator(inputChannel = "replyChannel")
public void replyHandler(byte[] in) {
System.out.println("replyHandler:"+new String(in));
}

@Bean
public MessageChannel clientChannel() {
return new DirectChannel();
}

@Bean
public MessageChannel replyChannel() {
return new DirectChannel();
}
}

问题:我想删除 replyChannel 并使用 clientChannel 通过 msg.sendAndReceive( )

@Bean
@ServiceActivator(inputChannel = "clientChannel")
public TcpOutboundGateway outGateway(AbstractClientConnectionFactory factory,
@Qualifier("clientChannel") MessageChannel chan) throws Exception {
TcpOutboundGateway g = new TcpOutboundGateway();
g.setConnectionFactory(factory);
g.setReplyChannel(chan);
return g;
}

但这行不通。执行永远卡在 TcpOutboundGateway 内并且永远不会返回。但为什么呢?

在 Debug模式下,我可以看到以下内容被一遍又一遍地打印:

调试 o.s.i.i.t.TcpOutboundGateway:第二次机会如果我使用想要摆脱的 replyChannel ,则不会打印此内容。

最佳答案

回答我自己的问题:完全省略g.setReplyChannel(chan);。然后网关默认将输出发送回消息模板。

关于java - 如何在 Spring-Integration 中使用相同的 MessageChannel 进行发送和接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44017703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com