请用白话讲解ActiveMQ的用途
发布时间:2025-05-23 11:38:49 发布人:远客网络
一、请用白话讲解ActiveMQ的用途
ActiveMQ是Apache出品的,目前最流行的,能力很强劲的开源消息总线。
一、MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。
2、对spring的支持,很容易和spring整合
3、支持多种传输协议:TCP,SSL,NIO,UDP等
二、apache的ActiveMQ,就是message queue,指的是消息队列的意思。主要的功能是处理消息,处理JMS的作用。jms是发送消息的java中发送消息的中间件,其中包括有以下5种数据流:
1、StreamMessage是指Java原始值的数据流。
2、MapMessage是指一套名称-值对。
3、TextMessage是指一个字符串对象。
4、ObjectMessage是指一个序列化的 Java对象。
5、BytesMessage是指一个未解释字节的数据流。
⒈多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉完全支持JMS1.1和J2EE1.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提供高速的消息持久化
⒎从设计上保证了高性能的集群,客户端-服务器,点对点
⒑可以很容易的调用内嵌JMS provider,进行测试
参考资料来源:百度百科-ActiveMQ
二、如何查看activemq 的消息接收记录
之前写了一个ActiveMQ发送消息的例子。现在记录一下java接收ActiveMQ消息的代码。都是本人工作中写过的。希望给大家一点帮助。代码如下:
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.log4j.Logger;
publicclass ReceiveMessageFromMQ{
privatestatic String url="tcp://localhost:61616";
privatestatic String password="";
privatestatic Logger logger= Logger.getLogger(ReceiveMessageFromMQ.class);
ActiveMQConnectionFactory connectionFactory= new ActiveMQConnectionFactory(user, password, url);
connection= connectionFactory.createConnection();
Session session= connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建目标,就创建主题也可以创建队列
Destination destination= session.createQueue("integratedalarm.subject");
MessageConsumer consumer= session(destination);
//接收消息,参数:接收消息的超时时间,为0的话则不超时,receive返回下一个消息,但是超时了或者消费者被关闭,返回null
Message message= consumer.receive(1000);
if(message instanceof TextMessage){
TextMessage textMessage=(TextMessage) message;
String text= textMessage.getText();
logger.info("接收的消息:"+"\n"+text);
logger.info("接收的消息:"+"\n"+message);
// TODO Auto-generated catch block
publicstaticvoid main(String[] args){
ReceiveMessageFromMQ receiveMessageFromMQ= new ReceiveMessageFromMQ();
receiveMessageFromMQ.receiveMessage();
上面有详细的注释,运行了上面的接收的方法之后,会打印出一条相应队列的未接收消息。在ActiveMQ的监视控制页面中,可以看到有一条消息已经被消费。
三、MQ 之 为什么,何时使用ActiveMQ
时间回到2003年,一群开源开发者集合在一起形成了Apache Geronimo。之后,他们发现当前没有好用的使用BSD-style许可协议的消息代理器。Geronimo是由于java EE兼容性需要一个JMS实现。所以一些开发者开始讨论其可能性。拥有丰富MOMs经验甚至自己创建过一些MOMs的这些开发者开始创建下一个伟大的开源消息代理。ActiveMQ这么快开始是因为当时市场上大多数的MOMs是商业,闭源而且购买和支持昂贵。市场上的MOMs已经广泛地被使用,但是一些商业行为是买不起如此昂贵的软件。这使得创建一个开源MOMs的需求更加大。很明显,有一个市场急需一个开源的使用Apache License的MOM。最终就导致了Apache ActiveMQ的诞生。
ActiveMQ遵循JMS规范,是为分布式应用远程交流而创建的。为了理解这目的,最好就是去看一些分布式应用的设计和是交互。
ActiveMQ提供松耦合的应用架构。松耦合一般是为了减轻经典RPC(Remote Procedure Calls)调用的紧耦合架构而被引入的。该松耦合以异步形式存在,任何一个应用对ActiveMQ的调用不依赖于任何其它应用,没有任何依赖或者时序要求。应用依赖于ActiveMQ的能力保证消息传递。因此,我们把应用发送消息的形式称之为触发和忘记(fire-and-forget)--应用发送消息到ActiveMQ之后并不关心消息如何或者什么时候被传递。同样的消息的接收者也不关心消息从哪里或者如何到来。在不同的环境中这样做的好处是允许客户端使用不同的语言编写甚至使用不同的线路协议。ActiveMQ作为中间人存在,允许不同环境的集成和异步交互。更多内容将在下一节论述。
当我们考虑分布式应用设计时,耦合是很重要的。耦合是指两个或多个应用间的相互依赖。考虑耦合的一个简单办法是思考其中某个应用改变所产生的影响,即其它应用所需要作出的改变。是否一个应用的变化会强制其它应用跟着改变?如果答案是肯定的,则这些应用是紧耦合的。如果一个应用的变化无需强制其它应用跟着改变,则这些应用是松耦合的。这说明了紧耦合系统比松耦合系统更难维护。也就是说,松耦合系统更能适应未知的变化。
在第二章我们将讨论COM,CORBA,DCE和EJB等使用RPC的技术,它们是紧耦合的。使用RPC,当一个应用调用另一个应用,调用者将被阻塞知道被调用者返回结果。图1.1描述了这个过程。