春季与春季融合还是新手,请耐心等待。 =)
我已经设置了一个使用TCP连接到远程服务器的客户端。一旦建立连接,服务器就会发送消息。使用ngrep我已经验证连接已启动,并且消息是从服务器发送的。
使用网关接口" gw"我可以成功收到消息。但是,我想要做的是在收到消息时触发com.example.Client.onMessage方法。我的理解是,使用ServiceActivator可以实现这一点,如下所示。这是真的还是我必须使用自己的专用线程进行阻塞接收?感谢。
配置
<bean id="javaDeserializer"
class="org.springframework.integration.ip.tcp.serializer.ByteArrayLfSerializer" />
<int-ip:tcp-connection-factory id="client"
type="client" host="localhost" port="12000"
single-use="false" so-timeout="10000" so-keep-alive="true" deserializer="javaDeserializer"
serializer="javaSerializer"/>
<int:gateway id="gw" service-interface="com.example.Interface"
default-request-channel="input" default-reply-channel="replies" />
<int:channel id="input" />
<int:channel id="replies">
<int:queue />
</int:channel>
<int-ip:tcp-outbound-channel-adapter
id="outboundClient" channel="input" connection-factory="client" />
<int-ip:tcp-inbound-channel-adapter
id="inboundClient" channel="replies" connection-factory="client"
client-mode="true" retry-interval="10000" auto-startup="true" />
<int:service-activator input-channel="input" output-channel="replies" ref="com.example.Client" method="onMessage" />
ServiceActivator
@EnableIntegration
@IntegrationComponentScan
@MessageEndpoint
public class Client {
@ServiceActivator
public void onMessage(byte[] received) {
//Not called
}
}
答案 0 :(得分:1)
@EnableIntegration
上配置 @IntegrationComponentScan
和@Configuration
。一般的Spring注释配置原则:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-java。虽然拥有XML配置,但根本不需要这些注释。
如果您希望从TCP接收<service-activator>
的消息,则必须将input-channel
配置为replies
。
现在你的配置太乱了:input
频道有几个订阅者。在这种情况下,他们通过循环方式接收传入的消息。
如果我理解正确,您应该删除所有<int:gateway>
人员,然后执行第2步。虽然目前尚不清楚如何向input
频道发送消息......