如何实现 Spring XD 接收器?
How to implement a Spring XD sink?
到目前为止,我已经实现了 Spring XD 处理器,例如像这样:
@MessageEndpoint
public class MyTransformer
{
@Transformer( inputChannel = "input", outputChannel = "output" )
public String transform( String payload )
{
...
}
};
但是,我现在坚持实施自定义接收器。当前的文档不是很有帮助,因为它只是通过 XML:
配置了一些东西 "magically"
<beans ...>
<int:channel id="input" />
<int-redis:store-outbound-channel-adapter
id="redisListAdapter" collection-type="LIST" channel="input" key="${collection}" auto-startup="false"/>
<beans:bean id="redisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<beans:property name="hostName" value="${host}" />
<beans:property name="port" value="${port}" />
</beans:bean>
</beans>
这将使用 redis store-outbound-channel-adapter 作为接收器。但是,文档没有告诉我如何创建一个简单的通用接收器,它只有一个输入通道并使用一条消息。
那么谁能给我提供一个最小的工作示例吗?
接收器就像处理器一样,但没有输出通道;使用 @ServiceActivator
调用您的代码(应该有 void
return)。
@MessageEndpoint
public class MyService
{
@ServiceActivator( inputChannel = "input")
public void handle( String payload )
{
...
}
};
编辑
对于来源,有两种类型:
轮询(从源中提取消息):
@InboundChannelAdapter(value = "output",
poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "1"))
public String next() {
return "foo";
}
消息驱动(消息源推送消息):
@Bean
public MySource source() {
// return my subclass of MessageProducer that has outputChannel injected
// and calls sendMessage
// or use a simple POJO that uses MessagingTemplate.convertAndSend(foo)
}
到目前为止,我已经实现了 Spring XD 处理器,例如像这样:
@MessageEndpoint
public class MyTransformer
{
@Transformer( inputChannel = "input", outputChannel = "output" )
public String transform( String payload )
{
...
}
};
但是,我现在坚持实施自定义接收器。当前的文档不是很有帮助,因为它只是通过 XML:
配置了一些东西 "magically"<beans ...>
<int:channel id="input" />
<int-redis:store-outbound-channel-adapter
id="redisListAdapter" collection-type="LIST" channel="input" key="${collection}" auto-startup="false"/>
<beans:bean id="redisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<beans:property name="hostName" value="${host}" />
<beans:property name="port" value="${port}" />
</beans:bean>
</beans>
这将使用 redis store-outbound-channel-adapter 作为接收器。但是,文档没有告诉我如何创建一个简单的通用接收器,它只有一个输入通道并使用一条消息。
那么谁能给我提供一个最小的工作示例吗?
接收器就像处理器一样,但没有输出通道;使用 @ServiceActivator
调用您的代码(应该有 void
return)。
@MessageEndpoint
public class MyService
{
@ServiceActivator( inputChannel = "input")
public void handle( String payload )
{
...
}
};
编辑
对于来源,有两种类型:
轮询(从源中提取消息):
@InboundChannelAdapter(value = "output",
poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "1"))
public String next() {
return "foo";
}
消息驱动(消息源推送消息):
@Bean
public MySource source() {
// return my subclass of MessageProducer that has outputChannel injected
// and calls sendMessage
// or use a simple POJO that uses MessagingTemplate.convertAndSend(foo)
}