JMS(Java消息服务)(Activemq简单介绍)

  • Post author:
  • Post category:java






是什么?



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。



版权声明:本文为m0_37746890原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。