Spring集成JMS

一.:要在spring下集成ActiveMQ,那么就需要将jar包导入项目,所需jar包如下:

这些jar包来自“apache-activemq-5.6.0\lib”中。

二:相关的实例

1.实例--1

1):.配置Spring与ActiveMQ的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd"
    default-autowire="byName">
    
    <!-- 配置connectionFactory -->
    <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
        destroy-method="stop">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL">
                    <value>tcp://127.0.0.1:61616</value>
                </property>
            </bean>
        </property>
        <property name="maxConnections" value="100"></property>
    </bean>

    <!-- Spring JMS Template -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref local="jmsFactory" />
        </property>
        <property name="defaultDestinationName" value="subject" />
        <!-- 区别它采用的模式为false是p2p为true是订阅 -->
        <property name="pubSubDomain" value="true" />
    </bean>

    <!-- 发送消息的目的地(一个Topic) -->
    <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
        <!-- 设置消息队列的名字 -->
        <constructor-arg index="0" value="subject" />
    </bean>
    <bean id="messageReceiver" class="com.pwc.spring.jms.example.JMSReceiver">
        <property name="jmsTemplate" ref="jmsTemplate"></property>
    </bean>
    
</beans>
2):.消息的发送者:

package com.pwc.spring.jms.example;

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 JMSSender {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext-jms.xml");
		JmsTemplate template=(JmsTemplate)applicationContext.getBean("jmsTemplate");
		Destination destination=(Destination)applicationContext.getBean("destination");
		template.send(destination, new MessageCreator(){

			@Override
			public Message createMessage(Session session) throws JMSException {
				// TODO Auto-generated method stub
				return session.createTextMessage("Send Message:Hello ActiveMQ Text Message!");
			}
			
		});
		System.out.println("Send the JMS Message Successfully!");
	}

}
3):.消息的接收者:

A:消息接收的入口:

package com.pwc.spring.jms.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JMSReceiverMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext-jms.xml");
		JMSReceiver proxyJMSConsumer=(JMSReceiver)applicationContext.getBean("messageReceiver");
		proxyJMSConsumer.receive();
		System.out.println("Initial Consumer End! ");
	}

}
B:消息接收的具体方法:

package com.pwc.spring.jms.example;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.JmsException;
import org.springframework.jms.core.JmsTemplate;

public class JMSReceiver {

	public JMSReceiver(){
		
	}
	private JmsTemplate jmsTemplate;
	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}
	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
	
	public void receive(){
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext-jms.xml");
		Destination destination=(Destination)applicationContext.getBean("destination");
		while(true){
			try {
				TextMessage txtmsg=(TextMessage)jmsTemplate.receive(destination);
				if(null!=txtmsg){
					System.out.println("DB Proxy: "+txtmsg);
					System.out.println("DB Proxy Message: "+txtmsg.getText());
				}else{
                                   break;
                                }
			} catch (JmsException e) {
				e.printStackTrace();
			} catch (JMSException e) {
				e.printStackTrace();
			}
		}
	}
}
先运行消息的接收者,再运行消息的发送者;

运行结果:


2. 实例--2

1)Spring与ActiveMQ配置文件信息:

<?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="springactivemq"></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="sender" class="com.pwc.spring.jms.further.Sender">
        <property name="jmsTemplate" ref="jmsTemplate"></property>

    </bean>
    <bean id="receiver" class="com.pwc.spring.jms.further.Receiver">
        <property name="jmsTemplate" ref="jmsTemplate"></property>
    </bean>
</beans>
2. 发送者发送消息

A:发送消息的入口

package com.pwc.spring.jms.further;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SenderMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		Sender sender=(Sender)context.getBean("sender");
		sender.sendInfo();
	}

}
B:发送消息的具体方法

package com.pwc.spring.jms.further;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class Sender {

	private JmsTemplate jmsTemplate;

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
	
	public void sendInfo(){
		jmsTemplate.send(new MessageCreator(){

			@Override
			public Message createMessage(Session session) throws JMSException {
				MapMessage message=session.createMapMessage();
				message.setString("lastName", "Leio");
				return message;
			}
			
		});
	}
}
3. 接收者接收消息

A:接收消息入口:

package com.pwc.spring.jms.further;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ReceiverMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		Receiver receiver=(Receiver) context.getBean("receiver");
		System.out.println(receiver.receiveMessage());
	}

}
B:接收消息方法:

package com.pwc.spring.jms.further;

import javax.jms.JMSException;
import javax.jms.MapMessage;

import org.springframework.jms.core.JmsTemplate;

public class Receiver {

	private JmsTemplate jmsTemplate;

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
	public Receiver(){
		
	}
	public String receiveMessage(){
		String receiveMessage="";
		MapMessage message=(MapMessage)jmsTemplate.receive();
		try {
			receiveMessage=message.getString("lastName");
		} catch (JMSException e) {
			e.printStackTrace();
		}
		return receiveMessage;
	}
}
先运行发送者,再运行接收者,结果如下:


参考: http://www.cnblogs.com/xwdreamer/archive/2012/02/27/2369967.html
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot可以集成和使用JMS(Java Message Service)来实现消息的发送和接收。 首先,在pom.xml文件中添加相应的依赖,如下所示: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> ``` 接下来,在application.properties文件中配置ActiveMQ的连接信息,如下所示: ```properties spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.user=admin spring.activemq.password=admin ``` 然后,在Spring Boot的配置类中添加注解@EnableJms,启用JMS功能。同时,使用@Bean注解注入ActiveMQ的连接工厂、目的地以及JmsTemplatebean。 ```java @Configuration @EnableJms public class JmsConfig { @Value("${spring.activemq.broker-url}") private String brokerUrl; @Value("${spring.activemq.user}") private String username; @Value("${spring.activemq.password}") private String password; @Bean public ConnectionFactory connectionFactory() { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); connectionFactory.setBrokerURL(brokerUrl); connectionFactory.setUserName(username); connectionFactory.setPassword(password); return connectionFactory; } @Bean public Queue queue() { return new ActiveMQQueue("myQueue"); } @Bean public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(connectionFactory); return jmsTemplate; } } ``` 然后,可以在需要发送消息的地方注入JmsTemplate,并使用其send或convertAndSend方法发送消息。如下所示: ```java @Autowired private JmsTemplate jmsTemplate; public void sendMessage(String message) { jmsTemplate.convertAndSend("myQueue", message); } ``` 对于接收消息,只需要在需要接收消息的方法上添加@JmsListener注解,并指定需要监听的目的地。如下所示: ```java @JmsListener(destination = "myQueue") public void receiveMessage(String message) { // 处理接收到的消息 } ``` 以上的步骤完成后,就可以在Spring Boot中集成和使用JMS了。我们可以使用ActiveMQ或其他JMS提供商来实现消息的发送和接收。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值