是什么?
JMS
(
java
消息服务)是规范,它定义了一些规则,一些接口。具体实现由各种做这个产品的厂家或开源组织来实现。
为什么?
在
JMS
还没有诞生前,每个企业都会有自己的一套内部消息系统,比如项目组
A
需要调用到项目组
B
的系统,项目组
B
也有可能会调用到项目组
C
的系统。这样每个公司都有自己的一套实现。很不规范。
怎么办?
Java
定义了消息服务的规范,不管哪个厂商做的消息服务的中间件,我们应用程序开发的时候都一样的去拿消息、读消息、生成消息。是一种与厂商无关的
API
,用来访问消息收发系统消息,类似于
JDBC
。
JMS
由以下元素组成:
JMS
提供者:
连接面向消息中间件的,
JMS
接口的一个实现。提供者可以是
Java
平台的
JMS
实现,也可以是非
Java
平台的面向消息中间件的适配器。
JMS
客户
:生产或消费基于消息的
Java
的应用程序或对象。
JMS
生产者:
创建并发送消息的
JMS
客户。
JMS
消费者:
接收消息的
JMS
客户。
JMS
消息:
包括可以在
JMS
客户之间传递的数据的对象
JMS
队列:
一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。
JMS
主题:
一种支持发送消息给多个订阅者的机制。
JMS
应用程序结构支持两种模型:
1
、点对点或队列模式:一对一的,我发过去消息,你就接受。生产者指定那个队列去生产的,消费者也是指定那个队列去接受的
2
、发布者
/
订阅者模式:类似微博里面,我订阅了一个主题,我们订阅了那个主题的人都可以看到订阅的更新
Activemq
简单介绍:
1
、
Activemq
是一个软件,是一个
服务器
,要启动起来,我们的程序作为生产者和消费者。
2
、当
activemq
重启的时候,之前发的
message
都不见了,是因为
activemq
没有做持久化处理。
3
、
Activemq
是单机的,在大数据领域使用
kafka
,
kafka
是分布式的,相当于大的缓冲池,数据有快有慢,在点击量大的时候,数据量非常大,如果不经过中间缓存,之间发送给
strom
处理的话,就会过载,因为一台服务器的处理能力有限,速度就匹配不上。
Activemq
和
kafka
本质上的工作差不多。
4
、
Activemq
消息服务支持跨语言,意味着我的应用程序可以是
java
、
php
、
c++
、
c
,那两者
之间的通信就得通过跨语言协议来做。
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"/>
<transportConnector name="ssl" uri="ssl://localhost:61617"/>
<transportConnector name="stomp" uri="stomp://localhost:61613"/>
<transportConnector uri="http://localhost:8081"/>
<transportConnector uri="udp://localhost:61618"/>
</transportConnectors>
Openwire、ssl、stomp
就是
activemq
支持的协议。其中最通用的是
stomp。