JMS
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。它是面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
前言:
在没有JMS出现的时候,很多应用系统存在这样的一种缺陷:
1、通信的异步性
client 端发起调用后,必须等待server处理完成并返回结果才能继续执行;2、client 和 server 的生命周期耦合太高
client 进程和 server 服务进程都必须可用,如果 server 出现问题或者网络故障,那么client端会收到异常;3、点对点通信
client 端的一次调用只能发送给某一个单独的服务对象,无法一对多
JMS(Java Message Service), 通过面向消息中间件(MOM:Message Oriented Middleware)的方式很好的解决了上面的问题。
调用过程:发送者把消息发给消息服务器,消息服务器将消息存放在若干队列/主体中,在合适的时候,消息服务器会将消息转发给接受者。在这个过程中,发送和接收是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然的关系;在pub/sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者。
JMS只是定义了Java 访问消息中间件的接口,其实就是在 javax.jms包中,除了定义了异常,其他的都是interface。
JMS只给出接口,然后由具体的中间件去实现,比如ActiveMQ就是实现了JMS的一种 Provider,还有阿里的RocketMQ,这些消息中间件都符合JMS规范
JMS规范术语:
Provider/MessageProvider:生产者
Consumer/MessageConsumer:消费者
PTP:Point To Point,点对点通信消息模型
Pub/Sub:Publish/Subscribe,发布订阅消息模型
Queue:队列,目标类型之一,和PTP结合
Topic:主题,目标类型之一,和Pub/Sub结合
ConnectionFactory:连接工厂,JMS用它创建连接
Connnection:JMS Client到JMS Provider的连接
Destination:消息目的地,由Session创建
Session:会话,由Connection创建,实质上就是发送、接受消息的一个线程,因此生产者、消费者都是Session创建的
ActiveMQ QuickStart
1、官网下载安装包
http://activemq.apache.org/download.html
解压使用即可
启动 ActiveMQ 根据系统位数启动 执行 activemq.bat (官方要求JDK必须要 Java 8 版本以上)
2、访问ActiveMQ 控制台的用户名、密码的配置信息修改配置
在 jetty-realm.properties 文件中修改 用户名、密码
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
admin: admin, admin
user: user, user
在 jetty.xml
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>
消息的定义和发送
生产者和消费者之间传递的对象,由3个主要部分组成:
消息头(路由) + 消息属性(消息选择器) + 消息体(JMS规范的5种类型)
简单整理了一下,参考
作者:张丰哲
链接:https://www.jianshu.com/p/ecdc6eab554c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。