ActiveMQ 实践之路
ActiveMQ的作用总结(应用场景及优势)以及springboot+activeMq实战
ActiveMQ的作⽤总结(应⽤场景及优势)以及springboot+activeMq实战业务场景说明:消息队列在⼤型电⼦商务类⽹站,如京东、淘宝、去哪⼉等⽹站有着深⼊的应⽤,队列的主要作⽤是消除⾼并发访问⾼峰,加快⽹站的响应速度。
在不使⽤消息队列的情况下,⽤户的请求数据直接写⼊数据库,在⾼并发的情况下,会对数据库造成巨⼤的压⼒,同时也使得系统响应延迟加剧。
在使⽤队列后,⽤户的请求发给队列后⽴即返回,(例如: 当然不能直接给⽤户提⽰订单提交成功,京东上提⽰:您“您提交了订单,请等待系统确认”),再由消息队列的消费者进程从消息队列中获取数据,异步写⼊数据库。
由于消息队列的服务处理速度远快于数据库,因此⽤户的响应延迟可得到有效改善。
图解说明:1. 消息队列说明消息队列中间件是分布式系统中重要的组件,主要解决应⽤耦合,异步消息,流量削锋等问题。
实现⾼性能,⾼可⽤,可伸缩和最终⼀致性架构。
是⼤型分布式系统的中间件。
⽬前在⽣产环境,使⽤较多的消息队列有,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。
2. 消息队列应⽤场景消息队列在实际应⽤中常⽤的使⽤场景。
异步处理,应⽤,流量削锋和消息通讯四个场景。
2.1. 异步处理场景说明:⽤户注册后,需要发注册邮件和注册短信。
传统的做法有两种1.串⾏的⽅式;2.并⾏⽅式。
(1)串⾏⽅式:将注册信息写⼊成功后,发送注册邮件,再发送注册短信。
以上三个任务全部完成后,返回给客户端。
(2)并⾏⽅式:将注册信息写⼊成功后,发送注册邮件的同时,发送注册短信。
以上三个任务完成后,返回给客户端。
与串⾏的差别是,并⾏的⽅式可以提⾼处理的时间。
假设三个业务节点每个使⽤50毫秒钟,不考虑⽹络等其他开销,则串⾏⽅式的时间是150毫秒,并⾏的时间可能是100毫秒。
因为CPU在单位时间内处理的请求数是⼀定的,假设CPU1秒内吞吐量是100次。
则串⾏⽅式1秒内CPU可处理的请求量是7次(1000/150)。
ActiveMQ实践入门指南
ActiveMQ实践入门指南ActiveMQ实践入门指南ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
下面我们将分四部分来介绍ActiveMQ的相关内容。
ActiveMQ实践:松耦合和ActiveMQ回到2003年,一群开源开发者聚在一起组成了Apache Geronimo。
他们发现没有一个很好的使用BSD风格许可证的消息中间件可用。
因为Geronimo需要一个JMS实现J2EE兼容性,所以一些开发者开始探讨这种可能性。
ActiveMQ实践:松耦合和ActiveMQActiveMQ实践:特性列表和安装这一部分,我们将介绍ActiveMQ的特性列表和如何进行安装和如何对其进行测试。
ActiveMQ实践:特性列表和安装ActiveMQ实践:使用场景在系统架构中,有很多场景ActiveMQ和异步消息都会产生深远的影响。
这部分中,我们将介绍一些使用ActiveMQ的场景实例。
ActiveMQ实践:使用场景ActiveMQ实践:ActiveMQ使用入门开始使用ActiveMQ并不是很难,你只需要启动代理,确保它能够接受连接和发送消息。
这部分中,我们将介绍如何开始使用ActiveMQ。
ActiveMQ实践:ActiveMQ使用入门ActiveMQ实践:松耦合和ActiveMQ回到2003年,一群开源开发者聚在一起组成了Apache Geronimo。
在这种情况下,他们发现没有一个很好的使用BSD风格许可证的消息中间件可用。
因为Geronimo需要一个JMS实现J2EE兼容性,所以一些开发者开始探讨这种可能性。
他们拥有大量的商业MOM经验,而且他们甚至之前已经创建了一些MOM,这些开发者打算创建下一代伟大的开源消息中间件。
使用ActiveMQ示例
13. message.setLong("count", new Date().getTime());14. Thread.sleep(1000);15. //通过消息生产者发出消息16. producer.send(message);17. }18. mit();19. session.close();20. connection.close();21. }Jms 接收代码:1. public static void main(String[] args) throws Exception {2. ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();3.4. Connection connection = connectionFactory.createConnection();5. connection.start();6.7. final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);8. Destination destination = session.createQueue("my-queue");9.10. MessageConsumer consumer = session.createConsumer(destination);11. /*//listener 方式12. consumer.setMessageListener(new MessageListener() {13.14. public void onMessage(Message msg) {15. MapMessage message = (MapMessage) msg;16. //TODO something....17. System.out.println("收到消息:" + new Date(message.getLong("count")));18. mit();19. }20.21. });22. Thread.sleep(30000);23. */24. int i=0;25. while(i<3) {26. i++;27. MapMessage message = (MapMessage) consumer.receive();28. mit();29.30. //TODO something....31. System.out.println("收到消息:" + new Date(message.getLong("count")));32. }33.34. session.close();35. connection.close();36. }启动 JmsReceiver 和 JmsSender 可以在看输出三条时间信息。
activemq消息中间件实验自我总结
activemq消息中间件实验自我总结ActiveMQ是一种流行的开源消息中间件,本次实验我对ActiveMQ进行了一些基本操作,并进行了实际的应用场景实践。
通过这次实验,我对ActiveMQ的原理、特性以及使用方法有了更深入的了解。
在实验之前,我预先了解了ActiveMQ的一些基本概念,包括消息队列、发布/订阅模式以及其它相关概念。
这为我后续实验的开展提供了一定的基础。
首先,我搭建了ActiveMQ的环境。
具体来说,我下载了ActiveMQ的安装包,然后解压并配置了相关的环境变量。
接着,我启动了ActiveMQ的服务器,并在浏览器中访问了ActiveMQ的管理控制台。
在控制台中,我可以看到一些连接的信息,并对消息队列进行管理。
接下来,我编写了一些示例程序进行实验。
首先,我创建了一个生产者程序。
在该程序中,我通过创建一个连接工厂,然后建立与ActiveMQ的连接以及创建一个会话。
然后,我创建了一个消息队列,并通过生产者发送了一条消息。
最后,我关闭了会话和连接。
在生产者的基础上,我编写了一个消费者程序。
在该程序中,我同样创建了一个连接工厂,然后建立与ActiveMQ的连接以及创建一个会话。
之后,我创建了一个消息接收器,并监听消息队列。
当有新消息到达时,程序会自动接收并进行处理。
最后,我关闭了会话和连接。
通过运行这两个示例程序,我成功地实现了消息的发送和接收。
从中我可以看出,ActiveMQ能够很好地支持消息的发布和订阅,确保消息的可靠传递。
然后,我尝试了一些更复杂的实验,以模拟真实应用场景。
例如,我创建了一个简单的电商系统。
在该系统中,我使用ActiveMQ实现了订单的消息通知功能。
当用户下单时,订单系统会将订单信息发送到一个消息队列中。
接着,支付系统监听该消息队列,一旦有新消息到达,支付系统会根据订单信息进行支付处理。
通过这种方式,我成功地实现了订单与支付系统之间的解耦合,并保证了系统的可靠性和稳定性。
消息队列——ActiveMQ使用及原理浅析
消息队列——ActiveMQ使⽤及原理浅析⽂章⽬录引⾔什么是消息中间件?随着业务的急速增长以及分布式架构的逐渐兴起,⾸先要考虑的就是如何⾼效的在各节点之间传递消息,其次要考虑的是流量洪峰时如何削减系统的压⼒以及跨平台消息的传输等问题,消息中间件就可以帮我们解决以上问题。
⽽消息队列产品众多,我们该如何选择呢?本系列⽂章主要针对⽬前使⽤最多的ActiveMQ、Kafka、RabbitMQ进⾏讲解说明。
正⽂⼀、ActiveMQ是如何产⽣的?产⽣背景⼀开始消息中间件的⼚商繁多,且各个⼚商之间没有统⼀的规范,这就导致了各消息中间件⾮常难以整合协作,因此,后来陆续出现了如JMS和AMQP 这样的消息队列规范,提供了统⼀的标准,⽽ActiveMQ就是完全遵循JMS规范开发的消息队列。
JMS规范基本概念什么是JMS(Java Message Service)规范?JMS是⼀个基于Java平台⾯向消息中间件(MOM)的API,⽤于在两个应⽤程序之间,或分布式系统中发送消息,进⾏异步通信。
在设计JMS时,设计师就计划能够结合现有消息队列的优点,如:不同的消息传送模式或域,例如点对点消息传送和发布/订阅消息传送⽀持同步和异步消息⽀持可靠性消息的传输⽀持常见的消息格式,如:⽂本、字节、流、对象等JMS体系结构上⾯是从百度找的⼀个图⽚,下⾯对其中各个对象分别进⾏说明:ConnectionFactory:连接⼯⼚,⼀般设为单例模式,⼀旦创建,就⼀直运⾏在应⽤容器内,客户端使⽤连接⼯⼚创建⼀个JMS连接。
Connection:JMS连接表⽰JMS客户端和服务器端之间的⼀个活动的连接。
Session:JMS会话表⽰JMS客户与JMS服务器之间的会话状态。
JMS会话建⽴在JMS连接上,表⽰客户与服务器之间的⼀个会话线程。
Destination:消息管道,从⽣产端流向客户端,包括队列(PTP),主题(Pub/Sub)。
Message Producer和Message Consumer:⽣产者和消费者对象由Session对象创建,⽤于发送和接收消息。
消息中间件-activemq实战之整合Spring(四)
消息中间件-activemq实战之整合Spring(四)前⾯的理论准备已经很充分,这⼀节我们来实战:将activemq整合到Spring框架才⾏中,因为Spring已经集成了JMS,这也为我们配置activermq带来了⽅便。
1. Spring对jms的⽀持因为Spring已经将JMS集成到框架⾥⾯了,对jms做了⾃⼰的封装,我们使⽤起来更加⽅便,在Spring中使⽤jms⽐较⿇烦的就是配置,在Spring中配置JMS⼤体需要8个部分:1. ConnectionFactory:和jms服务器的连接, 可以是外部的jms server, 也可以使⽤embedded ActiveMQ Broker;2. Destination:有topic和queue两种⽅式;3. JmsTemplate: spring提供的jms模板;4. MessageConverter:消息转换器;5. MessageProducer:消息⽣产者;6. MessageConsumer:消息消费者;7. MessageListener:消息监听器;8. MessageListenerContainer:消息监听容器。
下⾯我把完整的配置⽂件按照上⾯的步骤拆开分别讲解:1.1⾸先我们配置ConnectionFactory:<amq:connectionFactory id="amqConnectionFactory"brokerURL="tcp://127.0.0.1:61616"userName="admin"password="admin" />brokerURL是指要连接的activeMQ server的地址,该配置即使⽤activemq独⽴的消息存储环境,即使服务器重启消息也不会丢失。
<!-- 配置JMS连接⼯⼚ --><bean id="connectionFactory"class="org.springframework.jms.connection.CachingConnectionFactory"><constructor-arg ref="amqConnectionFactory" /><property name="sessionCacheSize" value="100" /></bean>我们从Spring给我们提供的connectionFactory中获取Connection,并且把该connectionFactory注册到上⾯定义的activemq server中。
Active MQ教程+配置
ActiveMQ-陈波Active MQ是一个基于Apcache 2.0licenced发布,开放源码的JMS产品。
其特点为:1)提供点到点消息模式和发布/订阅消息模式;2)支持JBoss、Geronimo等开源应用服务器,支持Spring框架的消息驱动;3)新增了一个P2P传输层,可以用于创建可靠的P2P JMS网络连接;4)拥有消息持久化、事务、集群支持等JMS基础设施服务。
Apache activemq是最受欢迎和最强大的开源消息中间件。
Apache activemq是非常快速的,支持多种跨客户端语言和协议,并且还有许多先进功能。
Apache activemq完全遵守JMS1.1和J2EE 1.4规范。
Apache activemq是在Apache 2.0License许可下发布的。
一.ActiveMQ是什么?ActiveMQ is the most popular and powerful open source MessageBus.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS 规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
下面是它的特性列表1.多种语言和协议编写客户端。
语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。
应用协议:OpenWire,Stomp REST,WS Notification,XMPP,AMQP2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)3.对Spring的支持,ActiveMQ可以很容得内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性4.通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上5.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA6.支持通过JDBC和journal提供高速的消息持久化7.从设计上保证了高性能的集群,客户端-服务器,点对点8.支持Ajax9.支持与Axis的整合10.可以很容易得调用内嵌JMS provider,进行测试二.ActiveMQ的竞争者1,其他开源JMS provider(资料来自):jbossmq(jboss4)jboss messaging(jboss5)joram-4.3.212006-09-22openjms-0.7.7-alpha-3.zip December26,2005mantamqubermqSomnifugiJMS2005-7-27开源的JMS Provider大部分都已经停止发展了,剩下的几个都是找到了东家,和某种J2EE 服务器挂钩,比如jboss mq与jboss,joram与jonas(objectweb组织),ActiveMQ与Geronimo(ASF APACHE基金组织),而在这3个之间,从网络底层来看,只有ActiveMQ使用了NIO,单从这个角度来看ActiveMQ在性能上会有一定的优势。
activemq用法(一)
activemq用法(一)ActiveMQ用法详解概述ActiveMQ是一款开源的,基于JMS(Java消息服务)规范的消息中间件。
它提供了高性能、可靠的消息传递方式,支持多种通信协议。
安装配置1.下载ActiveMQ二进制文件,解压到指定目录。
2.配置ActiveMQ启动脚本,设置JAVA_HOME和ActiveMQ_HOME环境变量。
3.启动ActiveMQ服务器,通过命令行或脚本方式启动。
发送消息•创建连接工厂对象使用ActiveMQConnectionFactory类创建连接工厂对象,需要指定ActiveMQ服务器的地址和端口。
•创建连接对象通过连接工厂对象的createConnection()方法创建连接对象。
•创建会话对象通过连接对象的createSession()方法创建会话对象,可以设置事务和确认模式。
•创建目标对象使用会话对象的createQueue()或createTopic()方法创建目标对象,分别代表点对点和发布订阅模式。
•创建消息生产者对象通过会话对象的createProducer()方法创建消息生产者对象。
•创建消息对象使用会话对象的createTextMessage()方法创建文本消息对象,可以设置消息内容。
•发送消息通过消息生产者对象的send()方法发送消息。
接收消息•创建连接工厂对象、连接对象、会话对象和目标对象同上。
•创建消息消费者对象通过会话对象的createConsumer()方法创建消息消费者对象。
•注册消息监听器通过消息消费者对象的setMessageListener()方法注册消息监听器,实现对消息的接收和处理。
•接收消息在消息监听器的onMessage()方法中处理接收到的消息。
消息持久化•配置持久化方式在ActiveMQ的配置文件中配置消息持久化方式,可以选择将消息持久化到磁盘,从而保证消息的持久性。
消息传递模式•点对点模式点对点模式下,消息发送者将消息发送到一个指定的队列,消息接收者从队列中接收消息。
ACTIVEMQ入门教程
ACTIVEMQ入门教程ActiveMQ是一个开源的消息中间件,它具有高性能、可靠性和可扩展性的特点,可以在分布式系统中处理大量的消息通信。
本教程将介绍如何入门使用ActiveMQ,包括安装配置、基本概念和使用方法等。
一、安装配置3. 启动ActiveMQ:进入解压目录,找到bin文件夹,执行activemq命令(Windows下执行activemq.bat,Linux下执行activemq.sh)。
5. 配置连接信息:在管理控制台中,可以配置ActiveMQ的连接信息,包括端口号、用户名、密码等。
二、基本概念1. Broker:Broker是ActiveMQ中的核心组件,负责接收和分发消息。
一个Broker可以同时连接多个生产者和消费者。
2. Destination:Destination是消息发送和接收的目的地。
可以分为两种类型:Queue和Topic。
Queue用于Point-to-Point的消息通信,每个消息只能被一个消费者接收;Topic用于Publish/Subscribe的消息通信,每个消息可以被多个订阅者接收。
3. Producer:Producer是消息的发送者,负责将消息发送到Broker的Destination中。
4. Consumer:Consumer是消息的接收者,负责从Broker的Destination中接收消息。
5. Message:Message是ActiveMQ中的消息对象,包含消息的内容和一些元数据信息。
三、使用方法1. 发送和接收消息:首先需要创建一个连接,并创建一个会话。
然后创建一个Destination,并创建一个Producer发送消息到该Destination中。
接收消息的方法类似,创建一个Destination,并创建一个Consumer用于接收消息。
2. 消息过滤:可以通过消息选择器来过滤消息。
消息选择器使用SQL-92语法来选择消息。
例如,可以通过消息属性来选择消息:consumer.receive("color = 'red'")。
activemq负载均衡实现
AMQ负载均衡Broker-Cluster部署方式中,各个broker通过网络互相连接并共享queue。
这在一定程度上可视为负载均衡的一种方法。
有两种实现方式:静态发现和动态发现。
注:jetty.xml的端口号也要改。
1、 The StaticTransport(静态发现,broker之间的协议,与client无关)静态发现协议使用硬编码的形式,使得broker可以发现其他的broker,并共享queue。
消息消费者可以从其中任意一个broker收到发给自己的消息。
示例如下:[1]. 将ActiveMq拷贝2份,分别命名:activemq1,activemq2,放在一台机器上(测试而已)[2]. activemq1做如下配置:<!—配置静态发现,使本broker可发现本机上61617端口的broker--><Network Connectors><networkConnector uri="static:(tcp://localhost:61617)"/></networkConnectors><transportConnectors><transportConnectorname="openwire"uri="tcp://0.0.0.0:61616?maximumConnectio ns=1000&wi reFormat.maxFrameSize=104857600"/></transportConnectors>activemq 2做如下配置:<!—配置静态发现,使本broker可发现本机上61616端口的broker--><networkConnectors><networkConnectoruri="static:(tcp://localhost:61616)"/></networkConnectors><transportConnectors><transportConnectorname="openwire"uri="tcp://0.0.0.0:61617?maximumConnectio ns=1000&wi reFormat.maxFrameSize=104857600"/></transportConnectors>通过以上配置使activemq 1和activemq 2这两个broker通过网络互相连接,并共享queue,启动activemq 1和activemq 2,可以看到如下启动日志:可以看到activemq 1和activemq 2,networkconnection has been established[3]. 测试代码:发送端链接tcp://localhost:61616,发送消息到queue,接收端做如下修改:connectionFactory = newActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:616 17");经测试Receiver可以接受到数据,表示activemq 1和activemq 2已经共享了queue。
ActiveMQ+jms实战
ActiveMQ+jms实战在介绍在介绍ActiveMQ之前,首先简要介绍一下JMS规范。
JMS的简介:(1)JMS(Java Message Servic e,Java消息服务)是一组Java应用程序接口(Java API),它提供创建、发送、接收、读取消息的服务。
JMS 使您能够通过消息收发服务从一个 JMS 客户机向另一个 JML 客户机交流消息。
JMS是一种与厂商无关的API,用来访问消息收发系统。
它类似于JDBC (Java Database Connectivity):这里,JDB C 是可以用来访问许多不同关系数据库的API,而JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。
许多厂商目前都支持JMS,包括IB M的MQSeries、BEA的Weblogic JMS service和Progress 的SonicMQ.(2)JMS典型的应用场景:操作可异步执行.发email了, 发msn消息了.或者一些比较耗时的操作, 比如要在某目录下生成一个大报表. 操作者把指令发出去就完事.[2]JMS的基本构件:(1)Broker什么是Broker呢?可以把JMS Brokers看成是服务器端。
这个服务器可以独立运行.也可以随着其他容器以内嵌方式云心,如下配置:使用显示的Java代码创建BrokerService broker = new BrokerService();// c onfigure the brokerbroker.addConnector("tcp://localhost:61616");broker.start();使用BrokerFacotry创建BrokerService broker = BrokerFactory.getInstance().createBroker(someURI);使用Spring Bean创建<bean id=‖broker‖ class=‖org.apache.activemq.xbean.BrokerFactoryBean‖><property name=‖config‖ value=‖classpath:org/apache/activemq/xbean/activemq.xml‖ /><property name=‖start‖ value=‖true‖ /></bean>还可以使用XBean或Spring 2.0等多种配置方式配置,通过ActiveMQConnectionFactory还可以隐含的创建内嵌的broker,这个broker就不是一个独立的服务了。
ActiveMQ架构设计与最佳实践
ActiveMQ架构设计与最佳实践ActiveMQ是最常用、特性最丰富的消息中间件,通常用于消息异步通信、调用解耦等多种场景,是JMS规范的实现者之一。
一、架构设计概要ActiveMQ提供两种可供实施的架构模型:“M-S”和“network bridge”;其中“M-S”是HA方案,“网络转发桥”用于实现“分布式队列”。
1、M-SMaster-Slave模型下,通常需要2+个ActiveMQ实例,任何时候只有一个实例为Master,向Client提供"生产"、“消费”服务,Slaves用于做backup或者等待Failover时角色接管。
M-S模型是最通用的架构模型,它提供了“高可用”特性,当Master失效后,Slaves之一提升为master继续提供服务,且Failover之后消息仍然可以恢复。
(根据底层存储不同,有可能会有消息的丢失)1)M-S架构中,设计到选举问题,选举的首要条件就是需要有“排它锁”的支持。
排它锁,可以有共享文件锁、JDBC数据库排它锁、JDBC锁租约、zookeeper分布式锁等方式实现。
这取决你的底层存储的机制。
2)M-S架构中,消息存储的机制有多种,“共享文件存储”、“JDBC”存储、“非共享存储”等。
不同存储机制,各有优缺点。
2、网络转发桥(network bridge)无论如何,一组M-S所能承载的消息量、Client并发级别总是有限的,当我们的消息规模达到单机的上限时,我们应该基于集群的方式,将消息、Client进行分布式和负载均衡。
ActiveMQ提供了“网络转发桥”模式,核心思想是:集群中多个broker之间,通过“连接”互相通信,并将消息在多个Broker之间转发和存储,提供存储层面的“负载均衡”,以及根据Client的并发情况,对Client进行动态平衡,最终实现支持大规模生产者、消费者。
二、M-S架构设计详解1、非共享存储模式集群中有2+个ActiveMQ实例,每个实例单独存储数据,Master 将消息保存在本地后,并将消息异步的方式转发给Slaves。
ActiveMQ应用开发指南
ActiveMQ应用开发指南ActiveMQ是一个开源的消息传递中间件,它能够通过许多协议和编程语言与各种系统集成。
作为Apache软件基金会的一个项目,ActiveMQ保证了可靠性和数据完整性,使得应用开发者更加轻松地开发分布式应用程序和服务。
1. 安装ActiveMQ要使用ActiveMQ进行应用开发,首先需要在本地计算机上安装ActiveMQ。
安装过程取决于操作系统和平台,因此应该访问ActiveMQ官方网站并从下载页面上获取适当的安装程序。
在安装过程中,应该选择默认设置以确保正确地安装ActiveMQ。
2. 使用ActiveMQActiveMQ提供了一种灵活而易于使用的API,它可以与多种开发语言集成,例如Java、C++、Python和Ruby等。
在使用ActiveMQ之前,必须先熟悉其基本概念和术语。
- Destination:消息发送和接收的地址- Producer:创建和发送消息的客户端- Consumer:接收和处理消息的客户端- Message:传递的数据单元,包含消息正文和相关元数据3. 创建ActiveMQ应用程序在使用ActiveMQ API之前,必须添加ActiveMQ类库到项目中。
这些类库在ActiveMQ安装目录的lib目录下,可以直接添加到项目中或通过构建工具来引用。
3.1 生产者创建生产者的主要任务是将数据转换为消息并将其发送到一个或多个消息目的地。
对于基于Java的应用程序而言,可以使用ActiveMQ所提供的几个类来创建一个生产者。
要创建与ActiveMQ Broker的连接并发送消息,需要以下步骤:- 创建ConnectionFactory对象- 创建Connection对象- 启动连接- 创建一个Session对象- 创建一个Destination(队列或主题)- 创建一个MessageProducer对象- 发送消息3.2 消费者对于基于Java的应用程序而言,需要使用ActiveMQ API中的许多具有各种方法和属性的类,以便从队列或主题中接收消息。
Java与ActiveMQ的集成研究与实践
Java与ActiveMQ的集成研究与实践引言消息队列是一种在分布式系统中常见的用于解耦应用程序之间通信的机制。
Java是一种广泛使用的编程语言,而ActiveMQ是一种可靠且功能强大的开源消息队列中间件。
本文将研究和实践Java与ActiveMQ的集成,探讨如何在Java应用程序中使用ActiveMQ发送和接收消息,以及如何处理一些常见的集成问题。
什么是ActiveMQ?ActiveMQ是Apache基金会的一个开源消息队列中间件,它完全支持Java Message Service (JMS)规范。
它具有高性能、可靠性和可扩展性,并提供了许多高级特性,如持久化、事务、消息过滤和复杂的路由等。
ActiveMQ可以与各种编程语言和应用程序集成,因此被广泛用于构建可靠的分布式系统。
Java与ActiveMQ的集成要将Java与ActiveMQ集成,我们首先需要将ActiveMQ的JAR文件添加到Java应用程序的类路径中。
然后,我们可以使用ActiveMQ提供的API来创建连接、会话、消息生产者和消息消费者。
创建连接首先,我们需要创建到ActiveMQ的连接。
可以通过以下代码实现:import org.apache.activemq.ActiveMQConnectionFactory;// 创建连接工厂String brokerUrl = "tcp://localhost:61616"; // ActiveMQ的地址ActiveMQConnectionFactory connectionFactory = new ActiveMQConnection Factory(brokerUrl);// 创建连接Connection connection = connectionFactory.createConnection();// 启动连接connection.start();创建会话创建连接后,我们需要创建会话。
activemq + mysql 分布式队列实现原理
activemq + mysql 分布式队列实现原理一、概述分布式队列是一种在多台计算机之间共享数据的方式,它允许将任务分配到不同的节点进行处理,从而提高系统的处理能力和可扩展性。
ActiveMQ和MySQL是两种常用的分布式队列实现方式,其中ActiveMQ是一个流行的消息队列系统,而MySQL则提供了数据存储功能。
二、ActiveMQ概述ActiveMQ是一个开源的消息队列系统,它提供了发布/订阅模式和消息队列模式两种消息传输方式。
发布/订阅模式允许一个消息发布到多个消费者,而消息队列模式则允许将消息存储在队列中等待消费者处理。
ActiveMQ支持多种消息协议,如AMQP、JMS和MQTT等。
三、MySQL概述MySQL是一个流行的关系型数据库管理系统(RDBMS)。
在这里,我们将MySQL用作分布式队列的数据存储层,为队列中的消息提供持久化存储和检索功能。
MySQL支持丰富的SQL查询语言,可以轻松地进行数据检索、更新和删除操作。
1. 消息生产:消息生产者使用ActiveMQ的API将消息发布到队列中。
这些消息被保存在MySQL数据库中,以便于存储和检索。
2. 消息传输:消费者从ActiveMQ的队列中获取消息。
如果队列为空,消费者将等待直到有新消息可用。
3. 数据持久化:MySQL为分布式队列提供了数据持久化的功能。
消息被写入MySQL数据库,以便在系统故障时能够恢复数据。
4. 负载均衡:ActiveMQ和MySQL可以协同工作,实现负载均衡,将任务分配到不同的节点进行处理,从而提高系统的处理能力和可扩展性。
5. 故障恢复:如果某台节点的ActiveMQ出现故障,系统可以自动将消息重新路由到其他健康的节点,从而保证系统的可用性和可靠性。
6. 消息确认:消费者在处理完消息后,通过MySQL数据库进行消息确认,以确保消息已被成功处理。
7. 配置管理:通过配置管理,可以轻松地扩展系统规模,添加或删除节点,而无需人工干预。
ActiveMQ实战
ActiveMQ实战1.1 什么是ActiveMQActiveMQ 是Apache出品,最流⾏的,能⼒强劲的开源消息总线。
ActiveMQ 是⼀个完全⽀持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应⽤中间仍然扮演着特殊的地位。
主要特点:1. 多种语⾔和协议编写客户端。
语⾔: Java, C, C++, C#, Ruby, Perl, Python, PHP。
应⽤协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP2. 完全⽀持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)3. 对Spring的⽀持,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,JXTA6. ⽀持通过JDBC和journal提供⾼速的消息持久化7. 从设计上保证了⾼性能的集群,客户端-服务器,点对点8. ⽀持Ajax9. ⽀持与Axis的整合10. 可以很容易得调⽤内嵌JMS provider,进⾏测试1.2 JMS介绍JMS的全称是Java Message Service,即Java消息服务。
⽤于在两个应⽤程序之间,或分布式系统中发送消息,进⾏异步通信。
它主要⽤于在⽣产者和消费者之间进⾏消息传递,⽣产者负责产⽣消息,⽽消费者负责接收消息。
把它应⽤到实际的业务需求中的话我们可以在特定的时候利⽤⽣产者⽣成⼀消息,并进⾏发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。
activemq 事务实现机制
activemq 事务实现机制ActiveMQ是一种流行的开源消息中间件,它提供了高性能、可靠的消息传递服务。
在分布式系统中,消息传递是一种重要的通信机制,可以实现不同系统之间的解耦和异步通信。
事务是保证消息传递的一致性和可靠性的重要机制之一。
本文将探讨ActiveMQ中事务的实现机制。
一、什么是事务事务是一组操作的集合,这些操作要么全部成功执行,要么全部失败回滚。
在消息传递中,事务可以确保消息的可靠传递和处理。
如果消息发送失败或者消息处理失败,事务可以回滚到之前的状态,保证系统的一致性。
二、ActiveMQ事务的实现机制ActiveMQ使用了JMS(Java Message Service)规范来实现消息传递,JMS规范提供了事务管理的接口。
ActiveMQ通过与JMS提供者(如Apache Qpid、RabbitMQ)的交互,实现了事务的管理和控制。
1. 事务的开始和提交在ActiveMQ中,事务的开始和提交是通过调用Session对象的begin()和commit()方法来实现的。
当一个事务开始时,会创建一个与之关联的事务上下文,并在该事务上下文中进行消息的发送和接收操作。
当所有操作都执行成功后,事务上下文会被提交,所有消息被确认发送到目标队列或主题。
2. 事务的回滚如果在事务执行过程中出现了异常或者某些操作失败,可以通过调用Session对象的rollback()方法来回滚事务。
回滚操作会使得事务上下文中的所有操作都被撤销,消息不会发送到目标队列或主题。
这种机制可以保证消息的一致性和可靠性。
3. 事务的隔离级别在ActiveMQ中,事务的隔离级别可以通过设置Session对象的acknowledgeMode属性来实现。
常见的隔离级别有以下几种:- Session.AUTO_ACKNOWLEDGE:自动确认模式,消息在被消费者接收之前自动确认。
- Session.CLIENT_ACKNOWLEDGE:客户端确认模式,消费者在接收消息后手动确认。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇原创作者: cctvx1阅读:1070次评论:0条更新时间:2007-03-07ActiveMQ本身是开源项目,所以采用ActiveMQ的项目往往也是以其他开源软件共同构建,目前主流开源应用服务器有Boss,geronimo,JOnAs,而其中geronimo 默认的JMS Provider就是ActiveMQ,那我们就着重介绍ActiveMQ与JBoss,JOnAs的整合方案本文参考了Integrating Apache ActiveMQ with JBoss与JBoss Integration,再根据笔者实际整合经验总结而成。
一.整合需要的环境.jdk1.5jboss-4.0.5.GAactivemq-ra-4.1.0-incubator.rar (在ActiveMQ 4.* lib\optional 目录里面有对应的ra的压缩包)开始整合前请确保jboss能够正确的启动起来。
二.整合步骤1. 步骤一: 解压activemq-rar-4.1.0-incubator.rar 到jboss-4.0.5.GA\server\default\deploy\activemq-ra.rar (这个是目录名字) 下面是activemq-rar.rar目录下面的文件和子目录,请注意红色标记的地方(后面会逐一说明,整合的过程)activeio-core-3.0.0-incubator.jaractivemq-core-4.1.0-incubator.jaractivemq-ra-4.1.0-incubator.jarbackport-util-concurrent-2.1.jarcommons-logging-1.0.3.jarderby-10.1.1.0.jargeronimo-j2ee-management_1.0_spec-1.0.jarspring-2.0.jarspring-1.2.6.jarxbean-spring-2.7.jarbroker-config.xmlMETA-INF2.步骤二. 删除多余的spring-1.2.6.jar,由于4.1.0的ra里面包含了2个不同版本的spring会触发一个exception的产生,https:///activemq/browse/AMQ-1124, 而且为了以后能够使用新的spring schema配置方式,我们这里会删除spring-1.2.6.jar,保留spring-2.0.jar。
(最新的snapshot version的ra已经去掉了这个多余的spring-1.2.6.jar).3.步骤三: 修改META-INF\ra.xml,让JBoss使用broker-config.xml 作为默认的配置文件配置borker. 修改下面的地方1. <config-property-value>config-property-value>2. <!-- <config-property-value>xbean:broker-config.xml</config-property-value>-->改为:1. <!-- <config-property-value></config-property-value> -->2. <config-property-value>xbean:broker-config.xmlconfig-property-value>表示使用broker-config.xml来配置启动ActiveMQ.4.步骤四: 修改borker-config.xml,默认的borker-config.xml会产生一个错误,无论是我使用的版本还是最后的snapshot版本,默认的borker-config.xml都会让xbean-spring 2.7(snapshot 使用的是2.8)抛出exception.解决的办法如下将1. <beans xmlns="/config/1.0">2. <broker useJmx="true" >改为1. <beans>2. <broker useJmx="true" xmlns="/config/1.0">即可5.步骤五: 将xbean-spring-2.7.jar (或者是2.8) 复制到jboss-4.0.5.GA\server\default\lib下面三使用整合完毕的ActiveMQ作为ds绑定到JBoss的JNDI服务。
编写jboss-4.0.5.GA\server\default\depoly\activemq-ds.xmlxml 代码<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE connection-factoriesPUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN""/j2ee/dtd/jboss-ds_1_5.dtd"><connection-factories><tx-connection-factory><jndi-name>activemq/QueueConnectionFactory</jndi-name><xa-transaction/><track-connection-by-tx/><rar-name>activemq-ra.rar</rar-name><connection-definition>javax.jms.QueueConnectionFactory</connectio n-definition><ServerUrl>tcp://localhost:61616</ServerUrl><min-pool-size>1</min-pool-size><max-pool-size>200</max-pool-size><blocking-timeout-millis>30000</blocking-timeout-millis><idle-timeout-minutes>3</idle-timeout-minutes></tx-connection-factory><tx-connection-factory><jndi-name>activemq/TopicConnectionFactory</jndi-name><xa-transaction/><track-connection-by-tx/><rar-name>activemq-ra.rar</rar-name><connection-definition>javax.jms.TopicConnectionFactory</connection -definition><ServerUrl>tcp://localhost:61616</ServerUrl><min-pool-size>1</min-pool-size><max-pool-size>200</max-pool-size><blocking-timeout-millis>30000</blocking-timeout-millis><idle-timeout-minutes>3</idle-timeout-minutes></tx-connection-factory><mbean code="org.jboss.resource.deployment.AdminObject" name="act ivemq.queue:name=outboundQueue"><attribute name="JNDIName">activemq/queue/outbound</attribute> <depends optional-attribute-name="RARName">jboss.jca:service=RA RDeployment,name='activemq-ra.rar'</depends><attribute name="Type">javax.jms.Queue</attribute><attribute name="Properties">PhysicalName=queue.outbound</attribu te></mbean><mbean code="org.jboss.resource.deployment.AdminObject" name="act ivemq.topic:name=inboundTopic"><attribute name="JNDIName">activemq/topic/inbound</attribute><depends optional-attribute-name="RARName">jboss.jca:service=RA RDeployment,name='activemq-ra.rar'</depends><attribute name="Type">javax.jms.Topic</attribute><attribute name="Properties">PhysicalName=topic.inbound</attribute> </mbean></connection-factories>启动JBoss.如果看见以下信息就表示ActiveMQ已经成功启动,并且使用上面的ds配置文件成功地将topic/queue绑定到了JNDI服务上。