Java 查找适当的队列使用者对

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。用于传输消息的通道

我需要在spring集成库的帮助下实现一个消息管道。开始时,正如我现在看到的,它需要包含几个元素:

a。消息网关

@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;
}