通过 TCP 发送字节时出错:意外消息 - 没有向连接拦截器注册的端点
Error when sending bytes through TCP: Unexpected message - no endpoint registered with connection interceptor
我正在尝试使用 DSL 将应用程序中的 integration.xml 重写为 Java 配置。我的集成流程是这样的:
Communication
对象来到sendCommunication
频道
sendCommunication
频道被路由到两个不同的频道
- 每个通道中的对象被转换为
byte[]
- 使用自定义记录器记录数据(窃听)
- 来自每个通道的字节使用两个不同的
TcpSendingMessageHandler
s 通过 TCP 发送
这是我的 Integration.java 与此流程相关的一部分(跳过了自定义记录器等一些 bean):
@Bean(name = "sendCommunicationRouter")
public IntegrationFlow routeRoundRobin() {
return IntegrationFlows.from(getSendCommunication())
.route(roundRobinRouter, "route",
s -> s.channelMapping("sendCommunication1",
"sendCommunication1")
.channelMapping("sendCommunication2",
"sendCommunication2"))
.get();
}
@Bean(name = "sendCommunication")
public MessageChannel getSendCommunication() {
return getDefaultMessageChannel();
}
@Bean(name = "sendCommunication1")
public MessageChannel getSendCommunication1() {
return getDefaultMessageChannel();
}
@Bean(name = "sendCommunication2")
public MessageChannel getSendCommunication2() {
return getDefaultMessageChannel();
}
@Bean(name = "tcpClientOutbound1")
public TcpSendingMessageHandler getTcpClientOutbound1() {
return getDefaultTcpClientOutbound(getOutboundConnectionFactory1());
}
@Bean(name = "tcpClientOutbound2")
public TcpSendingMessageHandler getTcpClientOutbound2() {
return getDefaultTcpClientOutbound(getOutboundConnectionFactory2());
}
private TcpSendingMessageHandler getDefaultTcpClientOutbound(TcpNetClientConnectionFactory connectionFactory) {
TcpSendingMessageHandler handler = new TcpSendingMessageHandler();
handler.setConnectionFactory(connectionFactory);
handler.setTaskScheduler(myScheduler);
handler.setClientMode(true);
handler.setRetryInterval(DEFAULT_CHANNEL_RETRY_INTERVAL);
handler.start();
return handler;
}
@Bean
public IntegrationFlow handleOutgoingCommunication1() {
return handleOutgoingCommunication(getSendCommunication1(), getTcpClientOutbound1());
}
@Bean
public IntegrationFlow handleOutgoingCommunication2() {
return handleOutgoingCommunication(getSendCommunication2(), getTcpClientOutbound2());
}
private IntegrationFlow handleOutgoingCommunication(MessageChannel inputChannel, TcpSendingMessageHandler handler) {
return IntegrationFlows.from(inputChannel)
.<Communication, byte[]>transform(communication -> communicationTransformer.toBytes(communication))
.wireTap(getLogger())
.handle(handler)
.get();
}
我在尝试通过 sendCommunication
通道(故意隐藏 IP)发送数据时遇到此错误:
2016-10-09 19:52:45 WARN TcpNetConnection:186 - Unexpected message -
no endpoint registered with connection interceptor:
IP:PORT:37007:b2347dad-b65c-4686-b016-5ef5ee613bd5 - GenericMessage [payload=byte[267], headers={ip_tcp_remotePort=PORT,
ip_connectionId=IP:PORT:37007:b2347dad-b65c-4686-b016-5ef5ee613bd5,
ip_localInetAddress=/LOCAL IP, ip_address=IP,
id=c6fb70b1-6d06-a909-cfc4-4eac7c715de5, ip_hostname=IP,
timestamp=1476035565330}]
非常感谢任何帮助,这个错误从昨天开始就让我很头疼。我自己找不到任何解释,google 只给我 github 上的 this 源代码。
这只是一个警告,表明从您向其发送消息的服务器收到了入站消息(回复?),并且没有配置入站通道适配器来处理传入消息。
也许如果您显示 XML 您正在尝试用 Java 配置替换,有人可以提供帮助。
我正在尝试使用 DSL 将应用程序中的 integration.xml 重写为 Java 配置。我的集成流程是这样的:
Communication
对象来到sendCommunication
频道sendCommunication
频道被路由到两个不同的频道- 每个通道中的对象被转换为
byte[]
- 使用自定义记录器记录数据(窃听)
- 来自每个通道的字节使用两个不同的
TcpSendingMessageHandler
s 通过 TCP 发送
这是我的 Integration.java 与此流程相关的一部分(跳过了自定义记录器等一些 bean):
@Bean(name = "sendCommunicationRouter")
public IntegrationFlow routeRoundRobin() {
return IntegrationFlows.from(getSendCommunication())
.route(roundRobinRouter, "route",
s -> s.channelMapping("sendCommunication1",
"sendCommunication1")
.channelMapping("sendCommunication2",
"sendCommunication2"))
.get();
}
@Bean(name = "sendCommunication")
public MessageChannel getSendCommunication() {
return getDefaultMessageChannel();
}
@Bean(name = "sendCommunication1")
public MessageChannel getSendCommunication1() {
return getDefaultMessageChannel();
}
@Bean(name = "sendCommunication2")
public MessageChannel getSendCommunication2() {
return getDefaultMessageChannel();
}
@Bean(name = "tcpClientOutbound1")
public TcpSendingMessageHandler getTcpClientOutbound1() {
return getDefaultTcpClientOutbound(getOutboundConnectionFactory1());
}
@Bean(name = "tcpClientOutbound2")
public TcpSendingMessageHandler getTcpClientOutbound2() {
return getDefaultTcpClientOutbound(getOutboundConnectionFactory2());
}
private TcpSendingMessageHandler getDefaultTcpClientOutbound(TcpNetClientConnectionFactory connectionFactory) {
TcpSendingMessageHandler handler = new TcpSendingMessageHandler();
handler.setConnectionFactory(connectionFactory);
handler.setTaskScheduler(myScheduler);
handler.setClientMode(true);
handler.setRetryInterval(DEFAULT_CHANNEL_RETRY_INTERVAL);
handler.start();
return handler;
}
@Bean
public IntegrationFlow handleOutgoingCommunication1() {
return handleOutgoingCommunication(getSendCommunication1(), getTcpClientOutbound1());
}
@Bean
public IntegrationFlow handleOutgoingCommunication2() {
return handleOutgoingCommunication(getSendCommunication2(), getTcpClientOutbound2());
}
private IntegrationFlow handleOutgoingCommunication(MessageChannel inputChannel, TcpSendingMessageHandler handler) {
return IntegrationFlows.from(inputChannel)
.<Communication, byte[]>transform(communication -> communicationTransformer.toBytes(communication))
.wireTap(getLogger())
.handle(handler)
.get();
}
我在尝试通过 sendCommunication
通道(故意隐藏 IP)发送数据时遇到此错误:
2016-10-09 19:52:45 WARN TcpNetConnection:186 - Unexpected message - no endpoint registered with connection interceptor: IP:PORT:37007:b2347dad-b65c-4686-b016-5ef5ee613bd5 - GenericMessage [payload=byte[267], headers={ip_tcp_remotePort=PORT, ip_connectionId=IP:PORT:37007:b2347dad-b65c-4686-b016-5ef5ee613bd5, ip_localInetAddress=/LOCAL IP, ip_address=IP, id=c6fb70b1-6d06-a909-cfc4-4eac7c715de5, ip_hostname=IP, timestamp=1476035565330}]
非常感谢任何帮助,这个错误从昨天开始就让我很头疼。我自己找不到任何解释,google 只给我 github 上的 this 源代码。
这只是一个警告,表明从您向其发送消息的服务器收到了入站消息(回复?),并且没有配置入站通道适配器来处理传入消息。
也许如果您显示 XML 您正在尝试用 Java 配置替换,有人可以提供帮助。