zoukankan      html  css  js  c++  java
  • 消息中间件ActiveMQ和JMS基础

    MQ主要流程

     解耦,异步,消峰

    其中目的地主要为队列或者主题

    队列点对点

    消息的生产者

    或者

      

     

    这时消息的生产者名字已经出来

    并且入队的数量变成了3

    上述完成的也就是这部分

     消息的消费者

    前四步大同小异

     

     这里需要和消息发送者的类型一致,所以需要强转一下

     其中等待接收可以设置为一直等或者设置时长

     最后再加上判断,良好的编程习惯

     执行一下

     出队变成了3,消费连接数变成了1,并且因为设置的receive为一直等,所以消费数量不会变化,除非关闭程序

    不过这种方法是阻塞的

    =====================

    =====================

    2通过监听的方式来消费消息(像是安卓中的监听事件)

    前5步不变,从while处改变

     加上System.in.read是让程序持续运行,不输入即一直运行,输入了然后就关闭,正好给消费时间

    不然不写这部分,程序运行速度肯定超过消费速度

    ===============================

    ===============================

    搞清楚了生产者消费者的基础程序和概念之后下面看一个重点

    消费生产的冲突问题---三大消费问题

    =================================

    =================================

    =================================

    主题发布订阅-一对多

    与队列基本一致,改一改名字和目的地即可

    生产者

     消费者同理也是如此操作即可

    最后再说下MQ中间件的产品很多:kafka,RocketMQ,而学习了activeMQ基本原理相通,

    JMS

    而MQ基本属于JMS规范( JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。)

     

     而jms常见的问题就是保障消息可靠性保证,

    1持久非持久2事务3签收

     这就是涉及到消息头中的DeliveryMode

    消息头

     1JMSDestination 目的地

     2JMSDeliveryMode 持久非持久模式

     

     3JMSExpiration 过期时间

     4   JMSPriority 优先级

     

     5JMSMessageID 唯一识别编号

    消息调用的幂等性就需要这个唯一识别编号

    当然最后看了上面的一个一个设置消息头是不是很麻烦,上面只是为了演示方法,还可以通过send统一批处理

     消息体

     

     消息属性-更进一步增加识别度

     

    怎样用:

     

     JMS可靠性

     1持久设置

    这也是前面消息头讲过的

     

     2事务设置(偏生产者)

    生产者事务

     前面我们都是用的false下面如设置为true看看

     为什么false这么方便,自动提交还需要false呢

    因为事务的特性:同生共死

    所以再写代码时应该是这样用,假设一个生产者挂了,这一事务(加入有十个生产者)就因为都不能执行,这时应让事务回滚重新执行

    即:正常给你提交,错误就再给你机会回滚直到生产成功

    看看下面伪代码

     3签收设置(偏消费者)

     

     前面的情况是非事务,如果按照事务的情况,你设置手动的情况不ACK都不影响了

    如一样可以接受

    Broker

    Broker可以被看成消息转发器。Broker也负责一些控制和管理操作。它能够定位服务端的位置,若发生异常,能够将异常捕获传给Client。Broker需要提供注册服务的接口给Server。如果请求来自其他的Broker,本地的Broker需要转发请求并最终将结果或异常回应给相应的远程Broker。Broker提供的服务和name service非常相像(如DNS、LDAP)。

    l 责任:1. 注册服务。2. 提供服务API。3. 转发消息。4. 容错处理。5. 与其他Broker的交互。6。 定位服务。

    导入依赖

     

     然后写Broker

     相当于ActiveMQ的一个mini版实例

    就可以不再调用136而是本机

  • 相关阅读:
    微软RPC技术学习小结
    [COM Interop学习小结]实现一个C#调用C++的示例
    [一个小问题]Mainfest配置文件的version问题小结
    【小结】IIS7下的Http Native Module开发
    Active Sync与IIS7 Classic&Integrated模式,Exchange 2007&2010的关系
    是否能在构造函数,析构函数中抛出异常?
    Trouble Shooting的一些感想(实时补充)
    python中 try、except、finally 的执行顺序
    Hessian怎样实现远程调用
    mysql的三种驱动类型
  • 原文地址:https://www.cnblogs.com/yangj-Blog/p/13253900.html
Copyright © 2011-2022 走看看