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系统中。
原文地址:https://www.cnblogs.com/JunQiang-Ma/p/14556314.html