找到合适的队列 - 消费者对

时间:2015-04-29 14:46:59

标签: java message-queue spring-integration

我需要在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();
}

另一方面,我希望路由器在消息通过网关和其他消息在队列中等待时立即启动。但在这种情况下,我收到一个错误,说我应该使用轮询器。

可能你可以给我一些建议,我怎么能实现我的计划。提前谢谢。

1 个答案:

答案 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"

的情况下,XML配置使用相同的名称

从另一侧@Router注释具有poller属性,以指定与XML中嵌套<poller>类似的内容。