- 浏览: 134080 次
文章分类
最新评论
-
wangyudong:
很有帮助的代码实例,测试Spring Boot REST AP ...
1、springboot入门案例helloworld与集成hibernate -
wangyudong:
学习了,的确是一个非常好的Spring boot实例,很快就写 ...
1、springboot入门案例helloworld与集成hibernate
JMS(JAVA Message Service,java消息服务)API是一个消息服务标准,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。
基本概念
JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。
消息模型
Point-to-Point(P2P) 点对点
Publish/Subscribe(Pub/Sub) 发布者/订阅者
即点对点和发布订阅模型。
P2P模型
概念
1、消息队列(Queue)
2、发送者(Sender)
3、接收者(Receiver)
4、每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
P2P特点:
1、每个消息只有一个消费者(即一旦被消费,消息就不在消息队列中)
2、发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收接收者有没有正在运行,它不会影响到消息被发送到队列。
3、接收者在成功接收消息之后需向队列应答成功。
如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。
Pub/sub发布订阅模式
概念
1、主题(Topic)
2、发布者(Publisher)
3、订阅者(Subscriber)
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
特点:
1、每个消息可以有多个消费者
2、发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
3、为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样即使订阅者没有运行,它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消息者处理的话,那么可以采用Pub/Sub模型。
消息的消费
在JMS中,消息的产生和消息的消费是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
同步
订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前将一直阻塞。
异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。
JMS编程模型
1、ConnectionFactory
创建Connection对象的工厂,针对两种不同的jms消息模型分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找Connectionactory对象。
2、Destination目的地址
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列或某个主题;对于消息消费者来说,它的Destination也是某个队列或主题。
Destination实际上就是两种类型的对象:Queue、Topic
3、Connection
Connection表示在客户端和JMS系统之间建立的连接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。它有两种类型:QueueConnection和TopicConnection。
4、Session
Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样也分,QueueSession和TopicSession.
5、消息生产者
消息生产者由session创建,并用于将消息发送到Destination。同样,消息生产者分为两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。
6、消息消费者
消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以通过session的createDurableSubscriber方法来创建持久化的订阅者。
7、MessageListener
消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。
企业消息系统的好处:
1、提供消息灵活性
2、松散耦合
3、异步性
ActiveMQ
activeMQ是一款开源的JMS具体实现,它是一个易于使用的消息中间件(MOM)。
消息中间件的用途和优点:
1、将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块递到另外一个模块。
2、负责建立网络通信的通道,进行数据的可靠传送。
3、保证数据不重发,不丢失。
4、能够实现跨平台操作,能够为不同操作系统上的软件集成提供数据传递服务。
MQ(Message Queue) 是一个消息的接受和转发的容器。可用于消息推送。
ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的应用环境中,并有许多高级功能。
ActiveMQ特性列表
多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
支持通过JDBC和journal提供高速的消息持久化
从设计上保证了高性能的集群,客户端-服务器,点对点
支持Ajax
支持与Axis的整合
可以很容易得调用内嵌JMS provider,进行测试
什么情况下使用ActiveMQ?
多个项目之间集成
(1) 跨平台
(2) 多语言
(3) 多项目
降低系统间模块的耦合度,解耦
(1) 软件扩展性
系统前后端隔离
(1) 前后端隔离,屏蔽高安全区
使用activeMQ示例
基本概念
JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。
消息模型
Point-to-Point(P2P) 点对点
Publish/Subscribe(Pub/Sub) 发布者/订阅者
即点对点和发布订阅模型。
P2P模型
概念
1、消息队列(Queue)
2、发送者(Sender)
3、接收者(Receiver)
4、每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
P2P特点:
1、每个消息只有一个消费者(即一旦被消费,消息就不在消息队列中)
2、发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收接收者有没有正在运行,它不会影响到消息被发送到队列。
3、接收者在成功接收消息之后需向队列应答成功。
如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。
Pub/sub发布订阅模式
概念
1、主题(Topic)
2、发布者(Publisher)
3、订阅者(Subscriber)
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
特点:
1、每个消息可以有多个消费者
2、发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
3、为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样即使订阅者没有运行,它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消息者处理的话,那么可以采用Pub/Sub模型。
消息的消费
在JMS中,消息的产生和消息的消费是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
同步
订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前将一直阻塞。
异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。
JMS编程模型
1、ConnectionFactory
创建Connection对象的工厂,针对两种不同的jms消息模型分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找Connectionactory对象。
2、Destination目的地址
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列或某个主题;对于消息消费者来说,它的Destination也是某个队列或主题。
Destination实际上就是两种类型的对象:Queue、Topic
3、Connection
Connection表示在客户端和JMS系统之间建立的连接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。它有两种类型:QueueConnection和TopicConnection。
4、Session
Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样也分,QueueSession和TopicSession.
5、消息生产者
消息生产者由session创建,并用于将消息发送到Destination。同样,消息生产者分为两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。
6、消息消费者
消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以通过session的createDurableSubscriber方法来创建持久化的订阅者。
7、MessageListener
消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。
企业消息系统的好处:
1、提供消息灵活性
2、松散耦合
3、异步性
ActiveMQ
activeMQ是一款开源的JMS具体实现,它是一个易于使用的消息中间件(MOM)。
消息中间件的用途和优点:
1、将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块递到另外一个模块。
2、负责建立网络通信的通道,进行数据的可靠传送。
3、保证数据不重发,不丢失。
4、能够实现跨平台操作,能够为不同操作系统上的软件集成提供数据传递服务。
MQ(Message Queue) 是一个消息的接受和转发的容器。可用于消息推送。
ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的应用环境中,并有许多高级功能。
ActiveMQ特性列表
多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
支持通过JDBC和journal提供高速的消息持久化
从设计上保证了高性能的集群,客户端-服务器,点对点
支持Ajax
支持与Axis的整合
可以很容易得调用内嵌JMS provider,进行测试
什么情况下使用ActiveMQ?
多个项目之间集成
(1) 跨平台
(2) 多语言
(3) 多项目
降低系统间模块的耦合度,解耦
(1) 软件扩展性
系统前后端隔离
(1) 前后端隔离,屏蔽高安全区
使用activeMQ示例
package com.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; /** * 生产者类 */ public class JMSProducerDemo { //默认连接用户名 private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; //默认连接密码 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; //默认连接地址 private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL; //发送的消息数量 private static final int SENDNUM = 10 ; public static void main(String[] args) { //1、创建工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL); //2、获取连接 Connection connection = null ; //3、获取会话 Session session ; //4、配置消息目的地址 Destination destination ; //获取消息生产者 MessageProducer messageProducer; try{ connection = connectionFactory.createConnection(); //启动连接 connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); destination = session.createQueue("FirstQueue"); messageProducer = session.createProducer(destination); sendMessage(session,messageProducer); }catch(Exception e){ e.printStackTrace(); }finally{ if(connection!=null){ try { connection.close(); } catch (JMSException e) { e.printStackTrace(); } } } } private static void sendMessage(Session session, MessageProducer messageProducer) { for(int i=0; i<JMSProducerDemo.SENDNUM; i++){ try { TextMessage message = session.createTextMessage("activeMQ 发送消息:helloworld"+i); System.out.println("发送消息:"+i); messageProducer.send(message); } catch (JMSException e) { e.printStackTrace(); } } } } package com.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; /** * 消费者类 */ public class JMSConsumer { //默认连接用户名 private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; //默认连接密码 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; //默认连接地址 private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL; public static void main(String[] args) { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL); Connection connection = null ; Session session ; Destination destination ; MessageConsumer messageConsumer; try{ connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); destination = session.createQueue("FirstQueue"); messageConsumer = session.createConsumer(destination); while(true){ TextMessage textMessage = (TextMessage) messageConsumer.receive(100000); if(textMessage!=null){ System.out.println("收到的信息:"+textMessage.getText()); }else{ System.out.println("no");break; } } }catch(Exception e){ e.printStackTrace(); }finally{ if(connection!=null){ try { connection.close(); } catch (JMSException e) { e.printStackTrace(); } } } } }
发表评论
-
tomcat学习一(简单web服务器示例)
2016-09-20 17:14 440Request.java package com.chen ... -
8、在docker上部署简单javaweb应用
2016-04-24 19:12 8431、创建容器javaweb1,并添加数据卷便于将安装文件共享到 ... -
7、Docker容器的数据管理
2016-04-24 17:56 1093一、Docker容器的数据卷 ... -
6、Docker容器的网络连接
2016-04-24 17:54 1668一、Docker容器的网络基础 dock ... -
4、Docker镜像
2016-04-22 09:05 773一、什么是Docker镜像 ... -
5、Docker客户端和守护进程
2016-04-22 09:04 954一、Docker的C/S模式 ... -
3、Docker容器常用命令与在容器中部署静态网站
2016-04-22 09:04 847一、容器的基本操作 ... -
2、Docker简介及docker组成部分
2016-04-22 09:03 17091、Docker提供了一个容器 ... -
1、Ubuntu14.04安装docker
2016-04-22 09:02 637一、安装前检查 1、内核版本 uname - ... -
6、java连接redis集群
2016-04-18 18:26 25751、使用Jedis 连接集群会报 MOVED错误 packag ... -
redis集群搭建
2016-04-18 16:15 543redis-cli -h 127.0.0.1 -p 6749 ... -
ubuntu14.04卸载redis并手动安装redis-3.0
2016-04-18 16:14 11161、ubuntu 卸载redis 1)卸载软件 ... -
redis五种数据类型常用基本命令总结
2016-04-14 19:00 709redis-cli 启动redis客户端,连接到redis服务 ... -
java连接远程服务器redis常遇问题
2016-04-14 18:58 32061、先在本地CMD命令中ping IP地址,网络是否正常 2、 ... -
redis虚拟机环境搭建与安装redis
2016-04-12 09:14 1741下载VMware 下载ubuntu14.iso 在VMware ... -
dubbo入门案例
2016-04-07 19:47 1164windows安装zookeeper 把下载的zookeepe ... -
webservice cxf简单案例
2016-03-30 18:44 642cxf简单java项目案例 IHelloWorld.java ... -
spring mvc教程视频
2016-01-18 17:29 7731. 韩顺平 Spring视频教程 http://www.yu ... -
Redis与Memcached比较
2016-01-13 11:01 779作为内存数据缓冲 ... -
Redis原理与简述
2016-01-13 10:46 12617Redis是一个开源的key-value存储系统。 ...
相关推荐
JMS教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置
spring整合JMS-居于ActiveMQ实现
利用ActiveMQ中间件发送JMS消息的例子
java开发实现JMS通信机制 服务器为 ActiveMQ java开发实现JMS通信机制 服务器为 ActiveMQ java开发实现JMS通信机制 服务器为 ActiveMQ
ActiveMQ 是Apache出品,最流行的,能力强劲的开源jms...ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
详细内容: SpringJMS整合ActiveMQ.doc 详细说明文档 apache-activemq-5.8.0-bin.zip ActiveMQ安装包 JMSTest.rar MyEclipse8.5下web工程
JMS-activemq 实例(分ppt,eclipse工程,说明三部分) 特别有readme说明,一看就会用 spring实现方式,可运行有jar包
MQ简介、JMS基础、ActiveMQ基础应用、ActiveMQ高级特性
<a href=http://activemq.apache.org/version-5-getting-started.html >http://activemq.apache.org/version-5-getting-started.html</a> <a href=http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html>...
JMS简明教程+JMS规范教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置+整合需要的lib文件+部署多个tomcat服务器方案等
一头扎进JMS之ActiveMQ,本人亲测,没问题。需要学习ActiveMQ的,这是比较好的入门资料,带源码。
一个jms activemq Topic 消息实例 关于jms JMS 是接口,相当于jdbc ,要真正使用它需要某些厂商进行实现 ,即jms provider 常见的jms provider 有 ActiveMQ JBoss 社区所研发的 HornetQ (在jboss6 中默认即可以...
spring3.0整合了activemQ和jms可以发送信息和接收消息
Java Messsage Service Java消息服务 为Java应用程序提供了完整的异步消息服务机制。 JMS源于企业应用对于消息中间件的需求,使...JMS有四个组成部分:JMS服务提供者、消息管理对象、消息的生产者消费者和消息本身。
SUN JMS 教程 APACHE ACTIVEMQ 教程
activemq与spring整合发送jms消息入门实例 jar 包和实例代码都在压缩包里了
java JMS模拟ActiveMQ代理服务器并实现消息收发,这里是工程源码,已经过测试,可以直接使用。
NULL 博文链接:https://yaozhiqiang109.iteye.com/blog/1073455
深入掌握JMS——ActiveMQ 十一章pdf,收集整理
Apache ActiveMQ JMS实现