- 浏览: 141762 次
-
文章分类
最新评论
-
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 540Request.java package com.chen ... -
8、在docker上部署简单javaweb应用
2016-04-24 19:12 9321、创建容器javaweb1,并添加数据卷便于将安装文件共享到 ... -
7、Docker容器的数据管理
2016-04-24 17:56 1211一、Docker容器的数据卷 ... -
6、Docker容器的网络连接
2016-04-24 17:54 1760一、Docker容器的网络基础 dock ... -
4、Docker镜像
2016-04-22 09:05 889一、什么是Docker镜像 ... -
5、Docker客户端和守护进程
2016-04-22 09:04 1077一、Docker的C/S模式 ... -
3、Docker容器常用命令与在容器中部署静态网站
2016-04-22 09:04 942一、容器的基本操作 ... -
2、Docker简介及docker组成部分
2016-04-22 09:03 18381、Docker提供了一个容器 ... -
1、Ubuntu14.04安装docker
2016-04-22 09:02 765一、安装前检查 1、内核版本 uname - ... -
6、java连接redis集群
2016-04-18 18:26 26931、使用Jedis 连接集群会报 MOVED错误 packag ... -
redis集群搭建
2016-04-18 16:15 649redis-cli -h 127.0.0.1 -p 6749 ... -
ubuntu14.04卸载redis并手动安装redis-3.0
2016-04-18 16:14 12091、ubuntu 卸载redis 1)卸载软件 ... -
redis五种数据类型常用基本命令总结
2016-04-14 19:00 787redis-cli 启动redis客户端,连接到redis服务 ... -
java连接远程服务器redis常遇问题
2016-04-14 18:58 33131、先在本地CMD命令中ping IP地址,网络是否正常 2、 ... -
redis虚拟机环境搭建与安装redis
2016-04-12 09:14 1805下载VMware 下载ubuntu14.iso 在VMware ... -
dubbo入门案例
2016-04-07 19:47 1294windows安装zookeeper 把下载的zookeepe ... -
webservice cxf简单案例
2016-03-30 18:44 765cxf简单java项目案例 IHelloWorld.java ... -
spring mvc教程视频
2016-01-18 17:29 8431. 韩顺平 Spring视频教程 http://www.yu ... -
Redis与Memcached比较
2016-01-13 11:01 869作为内存数据缓冲 ... -
Redis原理与简述
2016-01-13 10:46 12713Redis是一个开源的key-value存储系统。 ...
相关推荐
ActiveMQ - JMS 代理; Ehcache - Camel 缓存实现; Maven 的生命周期支持; 单元测试( jUnit启动嵌入式Jetty进行测试) 环境 应用程序是通过以下方式创建的: JDK 8u40 Tomcat 8.0.* 技术栈 阿帕奇骆驼 2.15...
- **作用与原理**:基于JMS标准的消息中间件。 - **应用场景**:异步处理、消息解耦。 - **数据提交不成功处理**:重试机制或回滚操作。 #### 电商项目面试问题 - **项目背景介绍**:简述项目的初衷、目标用户...
少儿编程scratch项目源代码文件案例素材-我的世界冒险通过 V5.zip
scratch少儿编程逻辑思维游戏源码-火星探测器.zip
少儿编程scratch项目源代码文件案例素材-炫酷音乐.zip
少儿编程scratch项目源代码文件案例素材-跳跃.zip
使用蚁群优化算法求解聚类问题.docx
少儿编程scratch项目源代码文件案例素材-像素小猫.zip
scratch少儿编程逻辑思维游戏源码-废料.zip
少儿编程scratch项目源代码文件案例素材-小绿人 demo.zip
房地产 -洪门湖 旅游项目一期落地方案 .pptx
scratch少儿编程逻辑思维游戏源码-经典版超级玛丽.zip
VID20250429210109.mp4
用Qt5.12.12写的一个计算24点的程序,输入4个任意数字用逗号分隔
少儿编程scratch项目源代码文件案例素材-我的世界 3D场景.zip
少儿编程scratch项目源代码文件案例素材-网格守卫者.zip
scratch少儿编程逻辑思维游戏源码-工厂逃生.zip
2022中德车联网(智能网联汽车)C-V2X量产应用研究报告_中国信息通信研究院&德国汽车工业协会
java基于ssm+jsp珠宝购物网站系统的毕业设计源码+论文
scratch少儿编程逻辑思维游戏源码-回旋镖男孩.zip