JAVA记录-消息队列介绍

1.JMS概述

JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通讯。html

它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需求中的话咱们能够在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应;另外一种是发布/订阅模式,即一个生产者产生消息并进行发送后,能够由多个消费者进行接收。linux

JMS的优点 

  1. Asynchronous(异步)

    JMS is asynchronous by default. So to receive a message, the client is not required to send the request. The message will arrive automatically to the client as they become available.(JMS 本来就是一个异步的消息服务,客户端获取消息的时候,不须要主动发送请求,消息会自动发送给可用的客户端)数据库

  2. Reliable(可靠)

    JMS provides the facility of assurance that the message will delivered once and only once. You know that duplicate messages create problems. JMS helps you avoiding such problems.(JMS保证消息只会递送一次。你们都遇到太重复建立消息问题,而JMS能帮你避免该问题。)apache

JMS具备两种通讯模式:

      一、Point-to-Point Messaging Domain (点对点)---1对1后端

      二、Publish/Subscribe Messaging Domain (发布/订阅模式)---1对多浏览器

JMS对象

  1. 管理对象(Administered objects)-链接工厂(Connection Factories)和目的地(Destination)
  2. 链接对象(Connections)
  3. 会话(Sessions)
  4. 消息生产者(Message Producers)
  5. 消息消费者(Message Consumers)
  6. 消息监听者(Message Listeners)

ConnectionFactory:
链接工厂,JMS 用它建立链接Connection,通常设为单例模式,
一旦建立,就一直运行在应用容器内,客户端使用JNDI查找链接工厂,而后利用链接工厂建立一个JMS链接。tomcat

Connection:
JMS链接表示JMS客户端和服务器端之间的一个活动的链接,是由客户端经过调用链接工厂的方法创建的。安全

Session:
JMS会话表示JMS客户与JMS服务器之间的会话状态。JMS会话创建在JMS链接上,表示客户与服务器之间的一个会话线程。服务器

Destination:
消息的目的,包括队列(PTP),主题(Pub/Sub)。架构

Message Producer和Message Consumer:
生产者和消费者对象由Session对象建立,用于发送和接收消息。

Message:
JMS 消息由如下几部分组成:消息头,属性,消息体。
消息头(header):JMS消息头包含了许多字段,它们是消息发送后由JMS提供者或消息发送者产生,用来表示消息、设置优先权和失效时间等等,而且为消息肯定路由Routing。
属性(property):由消息发送者产生,用来添加删除消息头之外的附加信息。
消息体(body):由消息发送者产生,JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。

同步与异步

同步交互:指发送一个请求,须要等待返回,而后才可以发送下一个请求,有个等待过程;

异步交互:指发送一个请求,不须要等待返回,随时能够再发送下一个请求,即不须要等待。 区别:一个须要等待,一个不须要等待,在部分状况下,咱们的项目开发中都会优先选择不须要等待的异步交互方式。

哪些状况建议使用同步交互呢?好比银行的转帐系统,对数据库的保存操做等等,都会使用同步交互操做,其他状况都优先使用异步交互

并行与串行

指的是任务的执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个以后才能进行下一个。并行指的是多个任务能够同时执行。异步是多个任务并行的前提条件。

2.消息队列概述

消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。其主要用途:不一样进程Process/线程Thread之间通讯。

经过消息队列,将短期高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务,改善网站系统的性能。在京东之类的电子商务网站促销活动中,合理地使用消息队列,能够有效地抵御促销活动刚开始就开始大量涌入的订单对系统形成的冲击。

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋控制等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺乏的中间件。

目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。

消息中间件优点:异步和解耦

如:服务端口监听--报文接收--报文解码--业务处理--报文编码--写回客户端

3.ActiveMq

  1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  2. 彻底支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
  3. 对Spring的支持,ActiveMQ能够很容易内嵌到使用Spring的系统里面去,并且也支持Spring2.0的特性
  4. 经过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中经过JCA 1.5 resource adaptors的配置,可让ActiveMQ能够自动的部署到任何兼容J2EE 1.4 商业服务器上
  5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  6. 支持经过JDBC和journal提供高速的消息持久化
  7. 从设计上保证了高性能的集群,客户端-服务器,点对点
  8. 支持Ajax
  9. 支持与Axis的整合
  10. 能够很容易得调用内嵌JMS provider,进行测试

4.maven activemq配置

<dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-core</artifactId>
      <version>5.7.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.12.1</version>
    </dependency>

 5.activemq配置

1.http://activemq.apache.org/download.html

2.下载解压

3.linux 下输入 ./activemq start/stop

4.ActiveMQ默认启动时,启动了内置的jetty服务器,提供一个用于监控ActiveMQ的admin应用。 

admin:http://127.0.0.1:8161/admin/

咱们在浏览器打开连接以后输入帐号密码(这里和tomcat 服务器相似)

默认帐号:admin

密码:admin

6.什么状况下使用ActiveMQ?

  1. 多个项目之间集成 
    (1) 跨平台 
    (2) 多语言 
    (3) 多项目
  2. 下降系统间模块的耦合度,解耦 
    (1) 软件扩展性
  3. 系统先后端隔离 (1) 先后端隔离,屏蔽高安全区
相关文章
相关标签/搜索