• activeMQ和JMS


    MQ

    简介

    消息处理队列,MessageQueue,是分布式系统中常见的重要组件,主要用于解耦,异步消息,流量削峰等问题。

    常见的消息中间件有JMS(java message service)、ActiveMQ、RabbitMQ、Kafka、RocketMQ。

    消息中间件:消息通信的桥梁。

    常见的业务场景

    1. 消息异步处理

    2. 应用解耦

      例如订单系统中用户下单后,订单系统处理完成后将消息写入消息队列,返回用户订单成功。
      库存系统消费消息队列中消息,订阅模式获取下单消息,库存系统根据下单消息进行库存操作。
      
    3. 流量削峰

      1、秒杀、团购,根据用户请求设置进队列人数,超过队列长度则抛弃用户。
      2、根据消息队列的请求消息在做后续处理。
      
    4. 日志处理

      日志采集客户端对Kafka消息队列写入,日志处理应用对消息进行消费。
      1、Kafka:接收用户日志的消息队列。
      2、LogStash:日志解析,统一成JSON格式输出给Elasticsearch。
      3、Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。
      4、Kibana:居于Elasticsearch的数据可视化组件,超强的数据可视化能力,是大多数公司选择ELK stack的重要原因。
      
    5. 消息通讯

      1、点对点通讯
      2、聊天室通讯,订阅公众号模式。
      

    JMS

    简介

    消息队列的java规范JMS。JMSAPI是一个消息服务的标准/规范,允许应用程序组件基于javaEE平台创建、发送、接收和读取消息。它使得分布式通讯解耦,消息服务更加可靠以及异步性。

    JMS常见的两种模式

    P2P生产消费模式:
    1、只有一个生产者和消费者,消息一旦被消费者消费,其他消费者将无法消费。
    2、没有时间上的依赖模式,不管现有生产者还是先有消费者都不影响消费者消费消息。
    3、接收者在消费成功后需要向队列应答成功。
    
    PubSub发布订阅模式:
    包含三个角色,主题Topic、发布者Publisher、订阅者Subscriber多个发布者将消息发送到主题中系统将消息传递给多个订阅者。
    1、只有一个发布者,但是可以有多个消费者(订阅者)。
    2、只要消息发布,所有的订阅者都可以看到发布内容。
    3、有时间上的依赖关系,要求必须订阅者先订阅,然后发布者发布消息后才能被订阅。
    4、为了消费消息订阅者必须保持阅读状态。
    

    消费消息

    在JMS中消息的生产和消费都是异步的。对于消费者来说,JMS的消费者可以通过两种方式来消费消息。

    1. 同步

      订阅者或者接受者通过receive方法来接收消息,receive方法在接收到消息之前或者超时之前将一直阻塞。

    2. 异步

      订阅者或者接收者可以注册一个消息监听器。等消息到达后,系统自动调用监听器的onMessage方法。

      JNDI:java命名和目录接口,是一种标准的java命名系统接口。可以在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或者命名服务中的一个记录,同时返回资源链接监理所需要的信息。

      JNDI和JMS中起到查找和访问发送目标或者消息来源的作用。

    JMS编程模型

    1、connectionFactory
    创建connnection对象工程,针对两种不同的JMS消息模型,分别有QueueConnectionFactory和TopicConnectionFactory,两种。可以通过JNDI来查找   
    COnnectionFactory对象。
    2、Destination
    Destination的意思是消费生产者的消息送达目标或者消息消费者峰消息来源。对于生产者就来说它的Destination是某个队列或者主题,对与消费者来说 
    Destination指的是队列或者主题(消息来源)。
    3、Connection表示客户端和JMS系统之间建立的链接。(TCP/IP socket的包装)Connection可以产生一个或者多个Session。跟ConnectionFactory一样, 
    connection也是两种。QueueConnection和TopicConnection。
    4、Session是操作消息的接口。可以通过Session创建生产者,消费者,消息等。Session提供了事务的功能。当需要使用Session发送/接收多个消息时,可以经 
    这些发送/接收动作放到同一个事物中,也分QueueSession和TopicSession。
    5、消息的生产者,由Session创建并用于并作用于将消息发送到Destination,同样消息生产者分为两种:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或者publish方法)发送消息。
    6、消息消费者有session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过Session的 
    CreatDurableSubscriber方法来创建持久化的订阅者。
    7、MessageListener,消息监听器如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。
    
    

    ActiveMQ

    简介

    ActiveMQ时qpache出品,完全支持JMS1.1和J2EE1.4规范的JMS provider实现。

    特性

    1. 多种语言和协议编写客户端。
    2. 完全支持JMS1.1和J2EE1.4。
    3. 对Spring的支持,ActiveMQ可以很容易内嵌到Spring系统中。
  • 相关阅读:
    给xpath添加正则表达式匹配函数
    利用window.open实现post方式的参数传递
    利用Http状态码检查网页内容是否更新
    一款很不错的html转xml工具Html Agility Pack
    ASP.NET MVC SiteMap provider的一个bug
    a标记链接相对路径的问题
    下载文件的Restful接口的前端实现
    游戏服务器体系结构
    c++资源之不完全导引 (收藏)
    Apache学习路线
  • 原文地址:https://www.cnblogs.com/JunQiang-Ma/p/14556314.html
Copyright © 2020-2023  润新知