我有一个带有请求和响应的Spring-Integration TCP服务器,它可以正常工作。那么现在我必须在我的应用程序中添加一个新图层。
我必须将我的消息发送到eh-cache db,然后发回ACK。目前我只有一个tcp客户端,但将来我会有其他来源,如下面的架构。
现在的问题是:
我可以使用Spring-Integration配置此行为吗?
我知道我可以在我的‘importService’
上接收消息并将其放在我的eh-cache上以这种方式编写代码:
public MyMessage handler(MyMessage message) {
try {
myCache.put(mykey, message)
} catch (Exception e) {
logger.error("unable to update" + e);
}
return message;
}
但我认为它不正确,我只是想知道我是否可以配置我的spring配置文件并添加另一个端点以创建链。 我当前的配置文件是:
<int-ip:tcp-connection-factory id="serverTcpConFact" type="server" port="5566" using-nio="false" single-use="false"
so-receive-buffer-size="8192"
so-send-buffer-size="8192"
so-tcp-no-delay="true"
task-executor="myTaskExecutor"
deserializer="serializer"
serializer="serializer"/>
<int-ip:tcp-inbound-channel-adapter id="tcpInboundAdapter"
channel="tcpInbound"
connection-factory="serverTcpConFact" />
<int:channel id="tcpInbound" />
<int:service-activator
output-channel="tcpOutbound"
input-channel="tcpInbound"
ref="importService"
method="handler" />
<bean id="importService" class="com.MyImportService" />
<int:channel id="tcpOutbound" />
<int-ip:tcp-inbound-gateway id="mygateway"
request-channel="tcpInbound"
reply-channel="tcpOutbound"
reply-timeout="6"/>
<int-ip:tcp-outbound-channel-adapter id="tcpOutboundAdapter"
channel="tcpOutbound"
connection-factory="serverTcpConFact" />
我正在查看公开示例,但我没有找到eh-cache示例和链示例。 谢谢 !!
答案 0 :(得分:1)
好吧,看起来它足以将缓存逻辑移到ChannelInterceptor
:
<int:channel id="tcpInbound">
<int:interceptors>
<bean class="com.my.proj.si.CachePutChannelInterceptor"
</int:interceptors>
</int:channel>
当你需要使用Cache时,可以从任何地方使用这个拦截器。