• JMS学习十一(ActiveMQ Consumer高级特性之独有消费者(Exclusive Consumer))


    一、简介

    Queue中的消息是按照顺序被分发到consumers的。然而,当你有多个consumers同时从相同的queue中提取消息时,

    你将失去这个保证。因为这些消息是被多个线程并发的处理。有的时候,保证消息按照顺序处理是很重要的。

    如,你可能不希望在插入订单操作结束之前执行更新这个订单的操作。

      技术分享

    二、使用

    ActiveMQ从4.x版本起开始支持Exclusive Consumer。 Broker会从多个consumers中挑选一个consumer来处理queue中

    所有的消息,从而保证了消息的有序处理。如果这个consumer失效,那么broker会自动切换到其它的consumer。 

    可以通过DestinationOptions 来创建一个Exclusive Consumer,如下:

    queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true");
    consumer = session.createConsumer(queue);

    还可以给consumer设置优先级,以便针对网络情况进行优化,如下:

    queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true&consumer.priority=10");

    A.         当在接收信息的时候有一个或者多个备份接收消息者和一个独占消息者的同时接收时候,无论两者创建先后,在接收的时候,均为独占消息者接收。

    B.         当在接收信息的时候,有多个独占消费者的时候,只有一个独占消费者可以接收到消息。

    C.         当有多个备份消息者和多个独占消费者的时候,当所有的独占消费者均close的时候,只有一个备份消费者接到到消息。

    解决一个队列并行问题:

    通过排队服务

    拆分业务逻辑 consumer 处理不同的业务,处理完后响应,确认消息消费成功,当10条全部消费完毕,

    又或者是根据具体业务情况,例如只有8条消息处理成功,程序是继续执行,记录日志,事后处理,还是立即数据回滚?灵活处理

  • 相关阅读:
    最大似然估计
    信号和槽:Qt中最差劲的创造
    从生物神经网络到人工神经网络
    巩固一下C语言中的指针
    linux启动后自动登录并运行自定义图形界面程序
    删除linux系统服务
    《痞子衡嵌入式半月刊》 索引
    痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU开发那些事
    痞子衡嵌入式:高性能MCU之音视频应用开发那些事
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU开发那些事
  • 原文地址:https://www.cnblogs.com/alter888/p/8978463.html
Copyright © 2020-2023  润新知