【发布时间】:2019-06-24 22:54:32
【问题描述】:
我有一个 spring-integration 应用程序,它使用消息驱动通道适配器从 Websphere MQ 队列接收 xml 消息,然后将此消息传递到 spring 集成通道(包含)以存储到数据库中。
如何确保一次只处理 1 条消息,即如果前面的消息没有到达特定端点(在我的例子中是服务激活器),则无法处理任何消息?
【问题讨论】:
我有一个 spring-integration 应用程序,它使用消息驱动通道适配器从 Websphere MQ 队列接收 xml 消息,然后将此消息传递到 spring 集成通道(包含)以存储到数据库中。
如何确保一次只处理 1 条消息,即如果前面的消息没有到达特定端点(在我的例子中是服务激活器),则无法处理任何消息?
【问题讨论】:
如果您不使用任何队列或执行器通道,并且将默认适配器并发设置为 1,则整个流程将在单个容器线程上运行。
因此,一次只会处理一条消息。
【讨论】:
QueueChannel 或ExecutorChannels。这些通道将工作移交给另一个线程。只要您使用默认通道(并且不向发布-订阅通道添加执行程序),两条腿都将在同一个线程上运行以完成。只有这样,才会处理下一条消息。