JMS的全称是Java Message Service,即Java消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需 求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种类型,一 种是点对点的,即一个生产者和一个消费者一一对应;另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
既然是使用的apache的activeMQ作为JMS的实现,那么首先我们应该到apache官网上下载activeMQ(http://activemq.apache.org/download.html),进行解压后运行其bin目录下面的activemq.bat文件启动activeMQ。这里我下载的是apache-activemq-5.8.0-bin,如果下载的版本高的话,那么也要相应的升级JDK的版本,否则会报错。
安装好以后可以访问http://localhost:8161/ ,如果可以访问,则表示安装成功。然后可以开始配置Spring了。
POM文件:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> </dependencies>
实例:
发送消息端:
public class ActiveSender implements Controller{ private JmsTemplate jmsTemplate; public JmsTemplate getJmsTemplate() { return jmsTemplate; } public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { System.out.println("begin"); MessageCreator messageCreator = new MessageCreator() { public Message createMessage(Session session) throws JMSException { TextMessage message = session.createTextMessage("张悦发送一条消息"); System.out.println("发送消息:" + "张悦 发送的消息"); message.setJMSPriority(7); //消息优先级,JMS把消息分为10个等级,0-4为普通优先级,5-9为加快优先级,ActiveMQ中默认的消息优先级为4 return message; } }; jmsTemplate.send(messageCreator); return null; } }
消费者端:
public class ActiveReceive implements MessageListener { public static void main(String[] args) { // ConnectionFactory :连接工厂,JMS 用它创建连接 ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS Provider 的连接 Connection connection = null; // Session: 一个发送或接收消息的线程 Session session; // Destination :消息的目的地;消息发送给谁. Destination destination; // 消费者,消息接收者 MessageConsumer consumer; connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616"); try { // 构造从工厂得到连接对象 connection = connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置 destination = session.createQueue("zyQueue"); consumer = session.createConsumer(destination); while (true) { //设置接收者接收消息的时间,为了便于测试,这里谁定为100s TextMessage message = (TextMessage) consumer.receive(100000); if (null != message) { System.out.println("收到消息" + message.getText()); } else { break; } } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) connection.close(); } catch (Throwable ignore) { } } } public void onMessage(Message message) { //这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换,或者直接把onMessage方法的参数改成Message的子类TextMessage TextMessage textMsg = (TextMessage) message; System.out.println("接收到一个纯文本消息。"); try { System.out.println("消息内容是:" + textMsg.getText()); } catch (JMSException e) { e.printStackTrace(); } } }
activeMq.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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"> <!--创建连接工厂--> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"></property> </bean> <!-- 声明ActiveMQ消息目标,目标可以是一个队列,也可以是一个主题ActiveMQTopic--> <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="zyQueue"></constructor-arg> </bean> <!----> <bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory"></property> <property name="defaultDestination" ref="destination"></property> <property name="receiveTimeout" value="600"></property> </bean> <!-- 消息监听器 --> <bean id="consumerMessageListener" class="org.huodong.action.ActiveReceive"/> <!-- 消息监听容器 --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="destination" /> <property name="messageListener" ref="consumerMessageListener" /> </bean> </beans>
相关推荐
**ActiveMQ实例详解** ActiveMQ,作为Apache软件基金会的一个开源项目,是业界广泛使用的消息中间件,它遵循Java Message Service(JMS)标准,提供高效、可靠的异步通信能力。在分布式系统中,ActiveMQ扮演着至关...
ActiveMQ是Apache软件基金会的一个开源项目,它是一个功能强大的消息中间件,支持多种消息协议,如OpenWire、AMQP、STOMP等。在本文中,我们将深入探讨ActiveMQ在点对点(Point-to-Point)消息传递和发布-订阅...
- **可扩展性(Scalability)**:随着业务增长,可以通过增加 ActiveMQ 实例来横向扩展。 ### 4. ActiveMQ 的源代码分析 在提供的源代码实例中,我们可以深入研究 ActiveMQ 的 API 使用、消息生产与消费的实现、队列...
总结,这个"activemq实例"展示了如何使用ActiveMQ实现点对点消息通信,以及如何通过支持多种协议实现跨系统的互操作性。ejb_mq_03和ejb_mq_03_client提供了具体的实现细节,有助于开发者理解和应用这些概念。理解并...
【ActiveMQ实例详解】 在IT行业中,消息队列(Message Queue,简称MQ)是一种重要的中间件,用于在分布式系统中解耦组件之间的通信,提高系统的响应速度和可扩展性。ActiveMQ是Apache软件基金会开发的一款开源消息...
在这个"ActiveMQ实例---分布式发送邮件"的案例中,我们将探讨如何利用ActiveMQ实现分布式环境下的邮件发送功能。 首先,让我们了解一下ActiveMQ的基本概念。ActiveMQ是一个实现了多种消息协议(如OpenWire、STOMP、...
**C# ActiveMQ实例详解** 在信息技术领域,消息中间件起着至关重要的作用,它能够帮助应用程序之间进行异步通信,提高系统的可扩展性和可靠性。ActiveMQ是Apache软件基金会开发的一款开源消息代理,支持多种协议,...
**ActiveMQ实例Demo详解** Apache ActiveMQ是一款开源的消息中间件,它是Java消息服务(JMS)的实现,广泛应用于分布式系统中的异步通信。ActiveMQ以其高性能、高可靠性以及丰富的特性,成为许多企业级应用首选的...
与我写的博客配套的,springboot整合activemq的项目实例,看我写的博客,在搭配实例可以非常快速的学会并使用avtivemq。 在先学习整合之前先了解一下ActiaveMQ,ActiveMQ是早期MQ产品之一,是使用JAVA语言编写。大...
在本文中,我们将深入探讨如何在Spring Boot应用中集成ActiveMQ,这是一个强大的Java消息服务(JMS)实现。首先,我们需要理解JMS的基本概念。Java消息服务(JMS)是Java平台上的一个标准API,它定义了应用程序如何...
在这个实例中,`JMS-activemq` 提供了三种不同的组成部分: 1. **PPTX文件(activemq.pptx)** - 这通常是一个演示文稿,详细介绍了JMS和ActiveMQ的基础知识、工作原理以及如何使用它们。它可能包含概念解释、架构...
在创建基于Maven的ActiveMQ实例时,我们需要在pom.xml中添加ActiveMQ相关的依赖。首先,确保你的Maven环境已经正确安装并配置。然后,在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.activemq ...
三、ActiveMQ实例解析 在提供的压缩包中,有三个示例文件,分别对应了消息队列中的生产者、消费者和订阅者角色: 1. activemq-demo-sub:这是订阅者示例,它会订阅特定的消息主题或队列,等待接收来自生产者的消息...
activemq-dockerfile activemq 实例的 Docker 文件 [ ] ./docker-build.sh ./docker-run.sh 享受