- 浏览: 41021 次
- 性别:
- 来自: 北京
文章分类
最新评论
Apache ActiveMQ简介: MQ是Apache出品的一个基于JMS消息处理机制的服务,可以很容易的潜入到Spring中,作为项目消息处理服务。
Apache ActiveMQ用途: jms有两种消息机制一种是消息队列,一种是消息订阅,简单来说就是一对一,和一对多。
一对一可以看做 一组消息对应一个 或 多个消息获取服务,其中每一个单独的消息体都只会被一个消息获取服务获取。
一对多可以看做 一组消息对应一个 或 多个接收服务,其中每一个单独的消息体发出之后都会被所有的接收服务收到一次。
根据以上两种模式我们可以在 发送短信的时候使用 消息队列模式。也可以在分布式的时候使用消息队列模式
消息订阅模式用的不是很多但是,在分布式中也可以应用同时可以结合WebService进行使用。例如一个新闻需要发给多个系统内的单独服务。
只要深刻理解了他的处理机制在很多情况下都可以应用,如果实在不喜欢这种方式也可以遵照java JMS的API用线程自己模拟消息队列机制。
我个人认为区别不是很大。更何况很多时候MQ的很多功能我们有没有用到,用这么个大家伙就是为了图省事。
这里备注一下:按原有设定在创建连接的时候MQ是不发送消息的。
下面我说以下使用方式:
本人目前只会JAVA
需要的包为
activemq-all-5.2.0.jar
log4j-1.2.14.jar
spring-beans-2.5.5.jar
spring-context-2.5.5.jar
spring-jms-2.5.5.jar
spring-core-2.5.5.jar
这些应该就足够了
我做测试的时候用的包为
activemq-all-5.2.0.jar
commons-pool-1.4.jar
log4j-1.2.14.jar
spring-beans-2.5.5.jar
spring-context-2.5.5.jar
spring-core-2.5.5.jar
spring-jms-2.5.5.jar
spring-tx-2.5.5.jar
spring-web-2.5.5.jar
spring-webmvc-2.5.5.jar
xbean-spring-3.4.jar
msbase.jar
mssqlserver.jar
msutil.jar
mysql-connector-java-5.0.4-bin.jar
mysql.jar
基本配置
下载 Apache ActiveMQ 不知道的googlean
安装服务的文件在
apache-activemq-5.5.0\bin\win32 目录下面Linux版也一样大同小异 运行.sh文件就好,如果出现问题请打开运行文件查看里面参数
activemq.bat直接运行启动服务
InstallService.bat安装成windos服务
UninstallService.bat卸载windos服务
安装成功后
在运行中 cmd
netstat -an|find “61616” 查询端口是否已经打开
D:\apache-activemq-5.5.0\conf\activemq.xml 本文件为服务配置文件
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618"/>
</transportConnectors>
这一项为端口设置
默认为 “61616”
目前以windos为例
把spring和项目联系起来
第一步为web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置Spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/NewFileMQ.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
先说 一下消息队列(也就是一对一)
NewFileMQ.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd">
<!-- 配置JMS链接模版 -->
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61618"/>
</bean>
<!-- 配置JMS模版 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="pubSubDomain" value="false" />
<property name="explicitQosEnabled" value="true" /> <!-- deliveryMode, priority, timeToLive 的开关,要生效,必须配置为true,默认false-->
<property name="deliveryMode" value="1" /> <!-- 发送模式 DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久-->
</bean>
<!-- 发送消息的目的地(一个队列) -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<!-- 设置消息队列的名字 -->
<constructor-arg index="0" value="HelloJmsQueue"/>
</bean>
<bean id="sender" class="message.Sender">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
<!--消息获取类-->
<bean id="receive" class="message.Receiver"></bean>
<!--给消息获取类加个监听让他能自动获取消息-->
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="destination" ref="destination"></property>
<property name="messageListener" ref="receive"></property>
</bean>
</beans>
发送消息的类
package message;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class Sender {
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void send(final String text){
System.out.println("---Send:"+text);
jmsTemplate.send(new MessageCreator(){
public Message createMessage(Session arg0) throws JMSException {
// TODO Auto-generated method stub
return arg0.createTextMessage(text);
}
});
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
Destination destination = (Destination) ctx.getBean("destination");
for(int i=0;i<10;i++){
final String dd = i+"";
//jmsTemplate.convertAndSend(destination,"发送消息: ActiveMQ Text Message!"+dd);
template.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("发送消息: ActiveMQ Text Message!"+dd);
}
});
}
System.out.println("成功发送了一条JMS消息");
}
}
接收消息类
package message;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.jms.core.JmsTemplate;
public class Receiver implements MessageListener {
//接听接收
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage text = (TextMessage) message;
try {
System.out.println("Receive:第四个接收者" + text.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//手动接收
public static void main(String[] args) throws JMSException {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
Destination destination = (Destination) ctx.getBean("destination");
while (true) {
TextMessage txtmsg = (TextMessage) template.receive(destination);
if (null != txtmsg)
System.out.println("收到消息内容为: " + txtmsg.getText());
else
break;
}
}
}
发布者模式
其实两种模式其它设置基本相同
唯一不用的就是 Spring配置文件中把一下这段替换一下就可以了
<!-- 发送消息的目的地(一个队列) -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
<!-- 设置消息队列的名字 -->
<constructor-arg index="0" value="HelloJmsTopic"/>
</bean>
Apache ActiveMQ用途: jms有两种消息机制一种是消息队列,一种是消息订阅,简单来说就是一对一,和一对多。
一对一可以看做 一组消息对应一个 或 多个消息获取服务,其中每一个单独的消息体都只会被一个消息获取服务获取。
一对多可以看做 一组消息对应一个 或 多个接收服务,其中每一个单独的消息体发出之后都会被所有的接收服务收到一次。
根据以上两种模式我们可以在 发送短信的时候使用 消息队列模式。也可以在分布式的时候使用消息队列模式
消息订阅模式用的不是很多但是,在分布式中也可以应用同时可以结合WebService进行使用。例如一个新闻需要发给多个系统内的单独服务。
只要深刻理解了他的处理机制在很多情况下都可以应用,如果实在不喜欢这种方式也可以遵照java JMS的API用线程自己模拟消息队列机制。
我个人认为区别不是很大。更何况很多时候MQ的很多功能我们有没有用到,用这么个大家伙就是为了图省事。
这里备注一下:按原有设定在创建连接的时候MQ是不发送消息的。
下面我说以下使用方式:
本人目前只会JAVA
需要的包为
activemq-all-5.2.0.jar
log4j-1.2.14.jar
spring-beans-2.5.5.jar
spring-context-2.5.5.jar
spring-jms-2.5.5.jar
spring-core-2.5.5.jar
这些应该就足够了
我做测试的时候用的包为
activemq-all-5.2.0.jar
commons-pool-1.4.jar
log4j-1.2.14.jar
spring-beans-2.5.5.jar
spring-context-2.5.5.jar
spring-core-2.5.5.jar
spring-jms-2.5.5.jar
spring-tx-2.5.5.jar
spring-web-2.5.5.jar
spring-webmvc-2.5.5.jar
xbean-spring-3.4.jar
msbase.jar
mssqlserver.jar
msutil.jar
mysql-connector-java-5.0.4-bin.jar
mysql.jar
基本配置
下载 Apache ActiveMQ 不知道的googlean
安装服务的文件在
apache-activemq-5.5.0\bin\win32 目录下面Linux版也一样大同小异 运行.sh文件就好,如果出现问题请打开运行文件查看里面参数
activemq.bat直接运行启动服务
InstallService.bat安装成windos服务
UninstallService.bat卸载windos服务
安装成功后
在运行中 cmd
netstat -an|find “61616” 查询端口是否已经打开
D:\apache-activemq-5.5.0\conf\activemq.xml 本文件为服务配置文件
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618"/>
</transportConnectors>
这一项为端口设置
默认为 “61616”
目前以windos为例
把spring和项目联系起来
第一步为web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置Spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/NewFileMQ.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
先说 一下消息队列(也就是一对一)
NewFileMQ.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd">
<!-- 配置JMS链接模版 -->
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61618"/>
</bean>
<!-- 配置JMS模版 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="pubSubDomain" value="false" />
<property name="explicitQosEnabled" value="true" /> <!-- deliveryMode, priority, timeToLive 的开关,要生效,必须配置为true,默认false-->
<property name="deliveryMode" value="1" /> <!-- 发送模式 DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久-->
</bean>
<!-- 发送消息的目的地(一个队列) -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<!-- 设置消息队列的名字 -->
<constructor-arg index="0" value="HelloJmsQueue"/>
</bean>
<bean id="sender" class="message.Sender">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
<!--消息获取类-->
<bean id="receive" class="message.Receiver"></bean>
<!--给消息获取类加个监听让他能自动获取消息-->
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="destination" ref="destination"></property>
<property name="messageListener" ref="receive"></property>
</bean>
</beans>
发送消息的类
package message;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class Sender {
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void send(final String text){
System.out.println("---Send:"+text);
jmsTemplate.send(new MessageCreator(){
public Message createMessage(Session arg0) throws JMSException {
// TODO Auto-generated method stub
return arg0.createTextMessage(text);
}
});
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
Destination destination = (Destination) ctx.getBean("destination");
for(int i=0;i<10;i++){
final String dd = i+"";
//jmsTemplate.convertAndSend(destination,"发送消息: ActiveMQ Text Message!"+dd);
template.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("发送消息: ActiveMQ Text Message!"+dd);
}
});
}
System.out.println("成功发送了一条JMS消息");
}
}
接收消息类
package message;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.jms.core.JmsTemplate;
public class Receiver implements MessageListener {
//接听接收
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage text = (TextMessage) message;
try {
System.out.println("Receive:第四个接收者" + text.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//手动接收
public static void main(String[] args) throws JMSException {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
Destination destination = (Destination) ctx.getBean("destination");
while (true) {
TextMessage txtmsg = (TextMessage) template.receive(destination);
if (null != txtmsg)
System.out.println("收到消息内容为: " + txtmsg.getText());
else
break;
}
}
}
发布者模式
其实两种模式其它设置基本相同
唯一不用的就是 Spring配置文件中把一下这段替换一下就可以了
<!-- 发送消息的目的地(一个队列) -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
<!-- 设置消息队列的名字 -->
<constructor-arg index="0" value="HelloJmsTopic"/>
</bean>
相关推荐
本文将深入探讨ActiveMQ 5.5.1版本与Spring框架的集成,以及如何利用Spring的模板模式简化ActiveMQ的使用。 一、ActiveMQ基础介绍 ActiveMQ是Apache软件基金会下的一个项目,遵循JMS(Java消息服务)规范,支持多种...
将ActiveMQ与Spring整合,可以充分利用Spring的便捷性来管理和使用消息队列,使得消息的发送和接收更加简单。 首先,要进行ActiveMQ与Spring的整合,你需要在项目中引入相应的依赖。通常,这可以通过在Maven或...
Apache ActiveMQ是业界广泛使用的开源消息中间件,尤其在Linux环境下表现出色。它基于Java语言开发,遵循Apache软件基金会的许可证,并且实现了多种消息传递协议,包括OpenWire、STOMP、AMQP和XMPP等。在Linux系统上...
本教程将深入探讨如何利用Apache ActiveMQ搭建、配置和集成到Spring框架中,以实现高效的数据通信。 首先,我们需要了解JMS的基本概念。Java消息服务(JMS)是Java平台上的一个标准接口,它定义了应用程序如何创建...
ActiveMQ是Apache软件基金会下的一个开源项目,它是Java消息服务(JMS)的一个实现,支持多种协议,如OpenWire、STOMP、AMQP、XMPP等。ActiveMQ具有高可用性、可伸缩性以及性能优秀等特点,能够处理大量并发的消息...
Apache ActiveMQ是广泛使用的开源消息代理,它支持多种消息协议,如AMQP、STOMP、JMS等。Spring框架是Java开发中的核心工具,它简化了配置和管理应用程序组件。将ActiveMQ与Spring结合,可以实现更高效、可扩展的...
Apache ActiveMQ是业界广泛使用的开源消息中间件,它基于Java消息服务(JMS)标准,提供了高度可扩展、可靠的异步通信能力。标题"apache-activemq-5.16.5"指的是该软件的一个特定版本,即5.16.5版本,通常每个新版本...
ActiveMQ是Apache软件基金会下的一个开源项目,是Java平台上最流行的消息中间件之一。而Spring框架则是Java企业级应用开发的事实标准,提供了丰富的功能和优秀的依赖注入机制。本篇将详细讲解如何将ActiveMQ与Spring...
将ActiveMQ与Spring进行整合,可以方便地在Spring应用中使用消息队列功能。 本案例主要展示了如何在Spring应用中集成ActiveMQ,实现消息的发送和接收。首先,我们需要在项目中引入ActiveMQ的相关依赖。在Maven工程...
在本文中,我们将深入探讨Apache ActiveMQ,特别是针对“apache-activemq-5.15.9-bin.zip”这个版本在Windows平台上作为MQTT服务器的使用。 首先,让我们理解MQTT(Message Queuing Telemetry Transport)。MQTT是...
在Java消息服务(Java Message Service,简称JMS)领域,Apache ActiveMQ是广泛使用的开源消息代理和集成框架。它支持多种协议,如OpenWire、AMQP、STOMP、MQTT等,使得应用程序能够通过消息传递进行异步通信。本篇...
ActiveMQ整合Spring的Demo是一个典型的Java企业级应用示例,它展示了如何在Spring框架中集成Apache ActiveMQ,以便实现消息队列的功能。ActiveMQ是Apache软件基金会的一个开源项目,它是一个功能丰富的Java消息服务...
ActiveMQ是Apache软件基金会开发的开源消息中间件,而Spring则是一个广泛使用的Java企业级应用开发框架。将两者结合,我们可以实现高效、可靠的消息通信。 首先,我们需要了解ActiveMQ的基本概念。ActiveMQ作为消息...
6. **网络传输优化**:ActiveMQ使用高效的TCP/IP连接,并支持NIO(非阻塞I/O)和TCP套接字压缩,以提高网络传输效率。 7. **管理工具**:压缩包内的管理工具,如“bin”目录下的控制台应用程序,允许用户监控和管理...
标签:activemq-spring-5.9.1-javadoc.jar,activemq,spring,5.9.1,javadoc,jar包下载,依赖包
apache-activemq-4.1.1.jar backport-util-concurrent-2.1.jar commons-lang-2.0.jar commons-logging-1.0.4.jar geronimo-j2ee-management_1.0_spec-1.0.jar log4j-1.2.14.jar spring-2.0.jar xbean-spring-2.8.jar
Apache ActiveMQ JMS实现
Apache ActiveMQ是开源的、基于Java消息服务(JMS)的应用服务器,它是Apache软件基金会的一部分。这个名为"apache-activemq-5.17.3"的压缩包包含了ActiveMQ的5.17.3版本,这是一个稳定且功能丰富的发布版本。在深入...
在Linux环境下配置和使用Apache ActiveMQ对于许多企业和开发者来说是至关重要的,因为Linux提供了稳定且安全的基础来运行这样的消息代理。下面我们将深入探讨如何在Linux系统中安装、配置和管理Apache ActiveMQ。 ...
Apache ActiveMQ 是一款开源的消息中间件,它是Apache软件基金会下的顶级项目,被广泛应用于构建分布式系统中的消息传递。在本文中,我们将深入探讨如何通过Apache ActiveMQ 5.8版本进行入门,以及如何构建一个简单...