博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activemq概念介绍
阅读量:5136 次
发布时间:2019-06-13

本文共 4301 字,大约阅读时间需要 14 分钟。

ActiveMQ概念介绍
是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,消息中间件。
消息中间件
A传递消息到B(功能或者系统),有比较强的耦合关系,但是耦合关系会带来一些问题,需要将AB断开
但是AB之间有依赖关系,需要找一个第三方M,进行通信。A发送消息到M,B从M获得消息,进行处理。
使用第三方进行消息传递,这种第三方叫做中间件。
作用
最主要的功能:实现JMS Provider,实现高可用高性能,可伸缩性,易于和安全企业级面向消息服务的系统。
异步操作(调用)
A发送消息到消息中间件,不必等待B消息结果的处理.
 
特点

1、 多种语言和协议编写客户端。语言: 、C、C++、C#、Ruby、Perl、、。应用协议:OpenWire、Stomp REST、WS Notification、XMPP、AMQP

2、完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

3、对的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

4、通过了常见J2EE服务器(如 Geronimo、JBoss 4、GlassFish、WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

5、支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA

6、支持通过JDBC和journal提供高速的消息持久化

7、从设计上保证了高性能的集群,客户端-服务器,点对点

8、支持Ajax

9、支持与Axis的整合

10、可以很容易得调用内嵌JMS provider,进行测试

消息形式
1、点对点(queue)
2、一对多(topic)
##########
MOM基本功能:将信息以消息的形式,从一个应用程序传送到另一个或多个应用程序
MOM主要特点:
1.消息异步接受,类似手机短信行为,消息发送者不需要等待消息接受者的响应,减少软件多系统集成的耦合度
2.消息可靠接受,确保消息在中间件可靠保存,只有接受方收到消息后才删除消息,多个消息也可以组成原子事物
应用场景:
多个系统间整合和通讯时候,通常要求:
1。可靠传输,数据不能丢失,有时候也要求不能重复传输
2.异步传输,否则各个系统同步发送接收数据,互相等待,造成系统瓶颈。
 简单的例子
创建两个工程A和工程B编写测试类
package activemqA; 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.ActiveMQConnectionFactory; //生产者public class Sender {		public static void main(String args[]){				Sender sender = new Sender();		sender.sendMessage("hello,activemqB");			}		public void sendMessage(String msg){				ConnectionFactory connectionFactory = null;		Connection connection = null;		Session session = null;				try {			//1.创建连接工厂			connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");			//2.得到一个连接			connection = connectionFactory.createConnection();			//3.创建一个Session			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);			//4.创建目的地			Destination destination = session.createQueue("myQueue");			//5.创建发送者			MessageProducer messageProducer = session.createProducer(destination);			//6.创建文本消息			TextMessage textMessage = session.createTextMessage(msg);			//7.发送消息			messageProducer.send(textMessage);		} catch (JMSException e) {			e.printStackTrace();		}finally{			//8.关闭connection和sessiosn					try {						if(connection !=null){						connection.close();						}						if (session !=null) {							session.close();						}					} catch (JMSException e) {						e.printStackTrace();			}		}	}}

 消费者

package activemqB; 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.ActiveMQConnectionFactory; //消费者public class Receiver {        public static void main(String args[]){                Receiver receiver = new Receiver();        receiver.receiverMessage();    }        public void receiverMessage(){                ConnectionFactory connectionFactory = null;        Connection connection = null;        Session session =null;            try {            //1.创建连接工厂            connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");            //2.得到一个连接            connection = connectionFactory.createConnection();            //3.创建一个Session            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            //4.创建目的地            Destination destination = session.createQueue("myQueue");            //5.创建接受者            MessageConsumer messageConsumer = session.createConsumer(destination);            //6.打开连接            connection.start();            //7.接收消息            TextMessage textMessage = (TextMessage) messageConsumer.receive(1000);            //8.输出验证            System.out.println("接收到的消息为:"+textMessage.getText());        } catch (JMSException e) {            e.printStackTrace();        }finally {                try {                    if (connection !=null) {                    connection.close();                    }                    if (session !=null) {                        session.close();                    }                } catch (JMSException e) {                    e.printStackTrace();            }        }    }}

 

转载于:https://www.cnblogs.com/fengzhongzhuzu/p/9958313.html

你可能感兴趣的文章
UVa 11464 Even Parity
查看>>
第二周 9.5 --- 9.11
查看>>
LATEX双栏最后一页如何平衡两栏内容
查看>>
大神教你如何快速解决所有电脑的问题?
查看>>
SpringMVC运行原理
查看>>
一个彩色颗粒随鼠标移动的html5源码
查看>>
swun 1397 来电显示
查看>>
[NOI2010]能量采集
查看>>
css中的选择器
查看>>
Linux安装redis
查看>>
微软移动 Nokia Lumia SensorCore SDK 介绍及上手体验
查看>>
新浪微博——点击按钮自动加关注代码
查看>>
Eclipse plug-in startup
查看>>
springboot jpa 保存乱码
查看>>
redhat linux6.5升级openssh
查看>>
spring父子容器
查看>>
windows+两个ubuntu系统的引导启动问题
查看>>
修改默认共享内存tmpfs大小
查看>>
ABAP版连连看
查看>>
UI基础六:UI报弹窗确认
查看>>