Java 查找适当的队列使用者对
我需要在spring集成库的帮助下实现一个消息管道。开始时,正如我现在看到的,它需要包含几个元素: a。消息网关Java 查找适当的队列使用者对,java,message-queue,spring-integration,Java,Message Queue,Spring Integration,我需要在spring集成库的帮助下实现一个消息管道。开始时,正如我现在看到的,它需要包含几个元素: a。消息网关 @MessagingGateway(name = "entryGateway", defaultRequestChannel = "requestChannel") public interface MessageGateway { public boolean processMessage(Message<?> message); } b。用于传输消息的通道
@MessagingGateway(name = "entryGateway", defaultRequestChannel = "requestChannel")
public interface MessageGateway {
public boolean processMessage(Message<?> message);
}
b。用于传输消息的通道:
@Bean
public MessageChannel requestChannel() {
return new DirectChannel();
}
c、 路由器,它决定消息的流向
@MessageEndpoint
@Component
public class MessageTypeRouter {
Logger log = Logger.getLogger(MessageTypeRouter.class);
@Router(inputChannel="requestChannel")
public String processMessageByPayload(Message<?> message){...}
另一方面,我希望路由器在消息通过网关时立即启动,其他消息在队列中等待。但在这个例子中,我收到了一个错误,它说我应该使用一个轮询器
也许你能给我一个建议,我怎样才能实现我的计划。提前谢谢。我们知道,使用XML配置,我们必须声明一个
组件,并用default=“true”
标记它。这允许任何轮询消费者
端点从上下文中拾取默认
轮询器
使用Java配置,我们必须声明一个@Bean
,用于类似目的:
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(10));
return pollerMetadata;
}
其中,PollerMetadata.DEFAULT\u POLLER
是定义DEFAULT
POLLER的特定常量。尽管在default=“true”
的情况下,XML配置中使用了相同的名称
从另一个角度看,
@Router
注释具有poller
属性,用于指定类似于XML中嵌套的
的内容。如您所见,我不想使用轮询语义。正如我所读到的,我使用的消息驱动网关实际上与queueChannel不兼容。问题是:如何使用消息驱动语义存储多个传入消息。您的频道怎么样?任何传入消息都将等待免费的线程
在ThreadPollTaskExecutor
的内部队列
中处理,这是我的管道:网关->频道->路由器->其他内容。如果我想使用executorChannel,我需要将Router和其他应用程序实现为可运行的,不是吗?不。Spring Integration在内部为您做到了这一点:只需将handleMessage
包装到Runnable
,用于TaskExecutor
@Bean
public MessageChannel requestChannel() {
return new QueueChannel();
}
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(10));
return pollerMetadata;
}