我需要在spring-intagration库的帮助下实现一个消息管道。一开始,正如我现在看到的,它需要包含几个元素:
一个。消息传递网关,
@MessagingGateway(name = "entryGateway", defaultRequestChannel = "requestChannel")
public interface MessageGateway {
public boolean processMessage(Message<?> message);
}
当我想要启动管道时调用:
messageGateway.processMessage(message);
湾发送消息的频道:
@Bean
public MessageChannel requestChannel() {
return new DirectChannel();
}
c.Router决定消息的流向何处
@MessageEndpoint
@Component
public class MessageTypeRouter {
Logger log = Logger.getLogger(MessageTypeRouter.class);
@Router(inputChannel="requestChannel")
public String processMessageByPayload(Message<?> message){...}
在很短的时间内可能有很多传入消息,所以我想实现一个频道(b)作为QueueChannel:
@Bean
public MessageChannel requestChannel() {
return new QueueChannel();
}
另一方面,我希望路由器在消息通过网关和其他消息在队列中等待时立即启动。但在这种情况下,我收到一个错误,说我应该使用轮询器。
可能你可以给我一些建议,我怎么能实现我的计划。提前谢谢。
答案 0 :(得分:0)
正如我们所知的XML配置,我们必须声明<poller>
组件并用default="true"
标记它。这允许任何PollingConsumer
端点从上下文中选取default
轮询器。
使用Java配置,我们必须声明@Bean
用于类似目的:
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(10));
return pollerMetadata;
}
PollerMetadata.DEFAULT_POLLER
是定义default
轮询器的特定常量。尽管在default="true"
。
从另一侧@Router
注释具有poller
属性,以指定与XML中嵌套<poller>
类似的内容。