ActiveMQ 消息队列

作者: print("") 分类: linux 发布时间: 2017-07-06 15:55

ActiveMQ 消息队列

JMS 消息队列介绍

  • 什么是消息队列

消息队列是在消息的传输过程中报错消息的容器、消息队列管理器在将消息从它的源中继到它目标充当中间人的作用、队列的主要目的是提供路由并确保消息的传输、如果发送消息时接受者不可用、消息队列会保留消息、知道可以成功传递它为止
消息队列报错消息也是有期限的

  • JMS消息介绍

Jms即Java消息服务( java Message Service )应用程序接口是一个java平台中关于面向消息中间件(MOM)的API。用于在两个平台应用程序之间、或分布式系统中发送消息、进行异步通信、Java消息服务是一个与平台无关的API、绝大多数MOM提供商对JMS提供支持。
JMS(Java messaging service)是JAVA平台上有关面向消息中间件的技术规范、它便于消息系统中的Java应用程序进行消息交换、并且通过提供标准的产生、发送接受消息、的接口简化企业应用的开发、翻译为java消息服务
JMS 是有包括 sun microsystems 和IBM等几个在内的公司合作设计的一个面向消息的中间件(MOM)API 。JMS定义了java中访问消息中间件的接口、当JMS只是接口。并没有给予实现、实现JMS、接口的消息中间件成为JMS提供者;;JMS的目的是应用程序在异步操作下可靠地传输和接受消息。从编程的角度来看、JMS可以当做一个容器管理的资源、与JDBC连接类似、正如可以通过JDBC去访问许多不同关系的数据库一样、可以通过JMS访问独立厂商的消息服务器系统
JMS 主要包括三个部分—JMS提供者(JMS provider ) ,消息发送者(Message producer)和消息接受者(message Consumer)..JMS 提供者是指实现JMS API揭露的消息系统、是消息的中转站、消息发送者是指消息的创造和发送者、是消息的发源地、消息接受者是指的消息的应用程序、是消息的,目的地 JMS消息是异步处理的、消息发送者可以发送一个消息而无须等待响应、消息发送者将消息发送到一条虚拟通道上、消息接受者则订阅或是监听该通道、一条消息可能最终转发给一个或多个消息接受者、这些接受者都无需对消息发送者做出回应。
2.1 JMS 消息传递模式
JMS支持两种消息传递模式—点对点模式(P2P)和发布/订阅模式
这两种的都是人们熟知的push、消息发送者是活动的发起人、而接受者则是被动接接收的消息、在JMS中、这些消息传递模式被称为消息域(message domian)
2.1.1 JMS点对点消息域(queue)
在点对点模式中、发送者和接受者对消息传递的目的的的地址达成一致、即所谓的对垒(queue)。消息对垒位于JMS提供者中、消息发送者向一个消息对垒发送消息、消息接受者可以在消息发送后任何时刻在这个队列中(被动地)接受消息、在接受者确定之前消息会一直保留在消息队列中直到过期。
JMS 点对点消息域具有以下特点:

  • 每条消息能而且只能被一个接受者接受
  • 每条消息或者被接接受者从队列中取走、或者被JMS提供者在超时的情况下删除、
  • 消息产生的时候接受者不一定要存在、接受者可以在消息产生后的任何时间里去走消息
  • 接受者不能请求一个消息
  • 接受者必须在接受消息后发送确定消息。

 
2.1.2 JMS发布/ 订阅消息域
发布/订阅模式下、发送者被称为发布者(publisher)。一个消息可已有很多接受者、这些接受者被称为订阅者(subscriber)、发布/订阅模式采用与点对点模式完全不同的消息发送模式、在发布/订阅模式下、发布者给一个主题发送消息、多个订阅者在订阅的时候可以订阅他们感兴趣的主题、一个主题可以被多个订阅者订阅、一个订阅者也可以订阅多个主题、一个主题的消息只能被发送给该主题的所有订阅者、订阅者只能接受它订阅的主题中的消息、并且、在默认情况下、订阅者在消息发送的时候必须是活动的、并随时准备接受消息、否则它将错过该消息、为了避免这种时间以来JMS API允许订阅者创建持久订阅
JMS发布/订阅消息域的具有以下特点:

  • 每一条消息由发布者创建而由0个或多个订阅者接受它
  • 消息立即被分发给现有的订阅者
  • 订阅者必须在消息发送的时候存在以接受消息
  • 持久订阅允许订阅者接受它处于非活动状态时由发布者向主题发送的消息
  • 订阅者必须在接受到消息后发出确定信息

2.2 JMS 消息的组成
在J2EE1.4 后、JMS API 不再区分点对点和发布/订阅域中创建的消息、JMS消息由以下三个部分组成:
消息头(header)—–JMS消息头包含了许多字段、他们是消息发送后由JMS提供者或消息发送者产生、用来表示消息、设置优先权和失效时间等等、并且为消息确定路由
属性(property)—消息发送者产生、用来添加删除消息头以外的附加消息
消息体(body)—由消息发送者产生、JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage

  • StreamMessage —java原始值的数据流
  • MapMessage — 一套名称-值对
  • TextMessage — 一个字符串对象
  • ObjectMessage — 一个列序化的Java 对象
  • BytesMessage –一个未解释字节的数据流

 
2.3 消息队列的形象流
(1)小规模的单Q队列形象图1 (2)小规模的单Q队列形象图2 (3)大型队列单Q队列形象图 三、ActiveMQ 介绍
ActiveMQ 是开源的JMS实现实现、apache出品、最流行的能力强劲的开源消息总线…
ActiveMQ是一个完全支持JMS1.1 和J2EE1.4 规范的JMS Provider 实现、尽管JMS规范出台已经很久的事情了、当是JMS在当今的j2ee应用中间仍然扮演者特殊的地位。
3.3.1 ActiveMQ主要特点
1、多种语言协议编写客户端、语言:java、C、C++、C#、Ruby、prel、python、PHP、应用协议:openwire、Stomp ReST、WS Notification 、XMPP、AMQP
2、完全支持JMS1.1 和J2ee1.4 规范(持久性。XA消息、事务)
3、对spring的支持、ActiveMQ可以很容易内嵌到使用Spring的系统里面去、而且也支持spring2.0的特性

  1. 通过了常用的J2EE服务的测试、其中通过JCA1.5 resoure adaptors 的配置可以让ActiveMQ 可以自动的部署到任何兼容J2EE1.4 商业服务器上。
  2. 支持多种传送协议:in-VM、TCP、SSL 、NIO、UDP、Jgroups、JXTA

6.仲裁通过JDBC和Journal提供高速的消息持久化

  1. 从设计上保证了高性能的集群、客户端-服务器、点对点
  2. 支持AJAX

9.支持与JXIs的整合

  1. 可以很容易的调用内嵌JMS provider,进行测试qi

架构图: 3.4 安装ActiveMQ
activemQ是apache的中间件、需要Java 环境安装JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载java
mkdir /usr/java
[root@Lserver-1 resin-4.0.48]# tar zxf jdk-8u131-linux-x64.tar.gz -C /usr/java
[root@Lserver-1 resin-4.0.48]# vim /etc/profile
JAVA_HOME=”/usr/java/jdk1.8.0_131″
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
source /etc/profile
[root@Lserver-1 resin-4.0.48]# java -version
java version “1.8.0_131”
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
下载ActiveMQ https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.14.5/apache-activemq-5.14.5-bin.tar.gz mv apache-activemq-5.14.5-bin.tar.gz /tools/
cd /tools/
tar zxf apache-activemq-5.14.5-bin.tar.gz
ln -s apache-activemq-5.14.5 activemq
[root@Rserver-1 tools]# ll
total 95780
lrwxrwxrwx.  1 root root        22 Jun 29 17:58 activemq -> apache-activemq-5.14.5
启动
cd /tools/activemq/bin/
[root@activemq bin]# ./activemq start
INFO: Loading ‘/tools/apache-activemq-5.14.5//bin/env’
INFO: Using java ‘/usr/java/jdk1.8.0_131/bin/java’
INFO: Starting – inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : ‘/tools/apache-activemq-5.14.5//data/activemq.pid’ (pid ‘55163’)
[root@activemq bin]# echo $?
0
检查启动端口
[root@activemq bin]# netstat -nltup|grep java
tcp        0      0 :::61613                    :::*                        LISTEN      55163/java
tcp        0      0 :::61614                    :::*                        LISTEN      55163/java
tcp        0      0 :::61616                    :::*                        LISTEN      55163/java
tcp        0      0 :::1883                     :::*                        LISTEN      55163/java
tcp        0      0 :::8161                     :::*                        LISTEN      55163/java
tcp        0      0 :::57505                    :::*                        LISTEN      55163/java
tcp        0      0 :::5672                     :::*                        LISTEN      55163/java
登陆web界面 http://192.168.236.143:8161/admin 默认账户密码admin admin 测试发送消息 已经成功
停止activemq
[root@activemq bin]# ./activemq stop

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

说点什么

avatar
  Subscribe  
提醒