首页 > 其他分享 >ActiveMQ和spring集成

ActiveMQ和spring集成

时间:2023-01-09 15:31:49浏览次数:37  
标签:集成 spring springframework javax org import ActiveMQ public jms

1.消息发送类



package cn.com.biceng.jms.queue;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import cn.com.biceng.jms.IQueueSender;
/**
* 队列消息发送者。
*/
public class QueueSender implements IQueueSender
{
// 发送消息的目的地
private Destination destination;
private JmsTemplate jmsTemplate;
public QueueSender(ActiveMQQueue queue){
this.destination = queue;
}
/**
* 发送消息。
*
* @param message
* 报文。
* @return
* @author ma_chunlin
* @date 2013-5-6
*/
public void send(final String message) throws JMSException
{
jmsTemplate.send(destination, new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
return session.createTextMessage(message);
}
});
}
public void setJmsTemplate(JmsTemplate jmsTemplate)
{
this.jmsTemplate = jmsTemplate;
}
}
package cn.com.biceng.jms.queue;

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

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

import cn.com.biceng.jms.IQueueSender;

/**
* 队列消息发送者。
*/
public class QueueSender implements IQueueSender
{

// 发送消息的目的地
private Destination destination;

private JmsTemplate jmsTemplate;

public QueueSender(ActiveMQQueue queue){
this.destination = queue;
}

/**
* 发送消息。
*
* @param message
* 报文。
* @return
* @author ma_chunlin
* @date 2013-5-6
*/
public void send(final String message) throws JMSException
{

jmsTemplate.send(destination, new MessageCreator()
{

public Message createMessage(Session session) throws JMSException
{

return session.createTextMessage(message);
}
});
}

public void setJmsTemplate(JmsTemplate jmsTemplate)
{

this.jmsTemplate = jmsTemplate;
}

}

2.消息接收类,此处采用监听器方式实现


Java代码  
package cn.com.biceng.jms.queue;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.log4j.Logger;
import org.springframework.jms.listener.SessionAwareMessageListener;
/**
*
* 消息接收监听器。
*/
public class QueueReceiverListener implements SessionAwareMessageListener
{
private static Logger log = Logger.getLogger(QueueReceiverListener.class);
public void onMessage(Message message, Session session) throws JMSException
{
//1.接收报文
TextMessage msg = (TextMessage)message;
if(log.isDebugEnabled()){
log.debug("QueueReceiverListener接收到报文:" + msg.getText());
}
//2.解析报文,建议此处使用工具类解析
//3.调用接口,处理业务,建议此处使用“抽象工厂模式”调用内部接口,以使代码符合“开-闭原则”
//4.发送返回消息(可省略)
}
}
package cn.com.biceng.jms.queue;

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

import org.apache.log4j.Logger;
import org.springframework.jms.listener.SessionAwareMessageListener;

/**
*
* 消息接收监听器。
*/
public class QueueReceiverListener implements SessionAwareMessageListener
{
private static Logger log = Logger.getLogger(QueueReceiverListener.class);

public void onMessage(Message message, Session session) throws JMSException
{
//1.接收报文
TextMessage msg = (TextMessage)message;

if(log.isDebugEnabled()){
log.debug("QueueReceiverListener接收到报文:" + msg.getText());
}

//2.解析报文,建议此处使用工具类解析

//3.调用接口,处理业务,建议此处使用“抽象工厂模式”调用内部接口,以使代码符合“开-闭原则”

//4.发送返回消息(可省略)
}
}


3.消息发送接口


Java代码  
package cn.com.biceng.jms;
import javax.jms.JMSException;
/**
* 队列消息发送者。
*
*/
public interface IQueueSender
{
/**
* 发送消息。
*
* @param message
* 报文。
* @return
* @author ma_chunlin
* @date 2013-5-6
*/
public abstract void send(final String message) throws JMSException;
}
package cn.com.biceng.jms;

import javax.jms.JMSException;
/**
* 队列消息发送者。
*
*/
public interface IQueueSender
{

/**
* 发送消息。
*
* @param message
* 报文。
* @return
* @author ma_chunlin
* @date 2013-5-6
*/
public abstract void send(final String message) throws JMSException;

}

4. 用到的jar




5. spring配置文件


Java代码  

<?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">
<!-- JMS activeMq的配置 -->
<!-- 1. 配置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">
<!-- JMS消息服务器的IP和端口号 -->
<value>tcp://192.168.8.241:61616</value>
</property>
</bean>
</property>
<property name="maxConnections" value="100"/>
<!-- <property name="idleTimeout" value="60"/> -->
</bean>
<!-- 2.Spring JMS Template -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsFactory" />
</property>
<property name="defaultDestinationName" value="queue_eSign_call_feeSys" />
<!-- 区别它采用的模式为false是p2p, true是订阅 -->
<property name="pubSubDomain" value="false" />
</bean>
<!-- 3.发送给计费系统的消息 -->
<bean id="queue_eSign_to_feeSys" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="queue_eSign_to_feeSys" />
</bean>
<!-- 4.来自计费系统的消息 -->
<bean id="queue_feeSys_to_eSign" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="queue_feeSys_to_eSign" />
</bean>
<!-- 5.消息发送者 -->
<bean id="QueueSender" class="cn.com.biceng.jms.queue.QueueSender">
<constructor-arg ref="queue_eSign_to_feeSys" />
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<!-- 6.队列监听器 -->
<bean id="QueueReceiverListener" class="cn.com.biceng.jms.queue.QueueReceiverListener">
</bean>
<!-- 7.队列监听器的容器 -->
<bean id="QueueReceiverContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="1" />
<property name="connectionFactory" ref="jmsFactory" />
<!-- 监听的队列 -->
<property name="destinationName" value="queue_feeSys_to_eSign" />
<property name="messageListener" ref="QueueReceiverListener" />
<property name="pubSubNoLocal" value="false"/>
</bean>
</beans>
<?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">

<!-- JMS activeMq的配置 -->

<!-- 1. 配置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">
<!-- JMS消息服务器的IP和端口号 -->
<value>tcp://192.168.8.241:61616</value>
</property>
</bean>
</property>
<property name="maxConnections" value="100"/>
<!-- <property name="idleTimeout" value="60"/> -->
</bean>

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

<!-- 3.发送给计费系统的消息 -->
<bean id="queue_eSign_to_feeSys" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="queue_eSign_to_feeSys" />
</bean>

<!-- 4.来自计费系统的消息 -->
<bean id="queue_feeSys_to_eSign" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="queue_feeSys_to_eSign" />
</bean>

<!-- 5.消息发送者 -->
<bean id="QueueSender" class="cn.com.biceng.jms.queue.QueueSender">
<constructor-arg ref="queue_eSign_to_feeSys" />
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>

<!-- 6.队列监听器 -->
<bean id="QueueReceiverListener" class="cn.com.biceng.jms.queue.QueueReceiverListener">
</bean>

<!-- 7.队列监听器的容器 -->
<bean id="QueueReceiverContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="1" />
<property name="connectionFactory" ref="jmsFactory" />
<!-- 监听的队列 -->
<property name="destinationName" value="queue_feeSys_to_eSign" />
<property name="messageListener" ref="QueueReceiverListener" />
<property name="pubSubNoLocal" value="false"/>
</bean>

标签:集成,spring,springframework,javax,org,import,ActiveMQ,public,jms
From: https://blog.51cto.com/u_4172728/5997329

相关文章

  • Spring Boot 3.0横空出世,快来看看是不是该升级了
    目录简介对JAVA17和JAVA19的支持recordTextBlocksSwitchExpressionsinstanceof模式匹配SealedClassesandInterfaces迁移到JakartaEEGraalVMNativeImageSupport对M......
  • Spring Boot 参数验证
    原文地址BeanValidation是在Java生态系统中实现验证逻辑的事实标准。它与Spring和SpringBoot很好地集成在一起。本教程介绍了所有主要的验证用例和每个用例的运......
  • hello_springboot_IDEA创建
    步骤我的jdk版本是1.8总之是因为创建第一个springboot程序报了很多次错,就比如无效的目标发行版:17和java:无法访问org.springframework.web.bind.annotation.Ge......
  • Springboot设置定时任务,从数据库中获取cron表达式 DEMO
    适用场景:需要在项目运行时改动定时任务执行时间,可将cron表达式放在缓存或者数据库中代码如下:(省略了获取cron的方法,需要自己根据情况获取) importorg.springframework.......
  • Spring事务的类层次结构及核心源码
    如果有这么一个需求:支持所有数据库系统的事务管理,包括获取事务、提交事务和回滚事务。你会怎么设计?本文介绍Spring是如何设计事务管理功能,将事务管理中的各个功能抽象成......
  • 017 跨域问题-从springboot后台解决
    解决跨域问题:创建对应的包packagecom.example.adminspringboot.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.anno......
  • Spring项目中用了这种解耦模式,经理对我刮目相看
    前言不知道大家在项目中有没有遇到过这样的场景,根据传入的类型,调用接口不同的实现类或者说服务,比如根据文件的类型使用CSV解析器或者JSON解析器,在调用的客户端一般都是用......
  • 新建springboot项目步骤
    1、file->new->project->springinitializr    打开pom.xml,换成ali源,快一些<repositories><repository><id>aliyun-repos</id>......
  • Springboot 非Web项目设置
    1使用场景有一个项目需要监听一个端口获取数据,这时候就不需要启动web环境了。但是又希望可以用Springboot比较方便。2具体实现在配置文件中加入:点击查看代码spr......
  • SpringBoot主键回显
    1、背景:在向数据库插入数据时,在主键自增时不需要主键字段,但是接下来还需主键进行其它操作2、实现:实体类:publicclassUser{privateintuserId;privateStr......