JMS-ActiveMQ学习-3 ActiveMQ与Spring集成

Spring下开发消息的发送和接收程序

点对点模式

一、创建生产者项目

1.创建maven项目

2.添加spring-jms、jms规范、activemq依赖

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-apis</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.4</version>
</dependency>
</dependencies>

3.创建applicationContext.xml和applicationContext-jms.xml

applicationContext.xml中的配置内容:

<import resource="applicationContext-jms.xml"/>

applicationContext-jms.xml中的配置内容:

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="myQueue"/>
</bean>

4.具体实现接口和类
1>创建dao层接口和类
public interface MessageDao {
public void sendMessage(String message);
}
@Repository
public class MessageDaoImpl implements MessageDao {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessage(final String message) {
System.out.println("send message start");
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
2>创建service层接口和类
public interface MessageService {
public void sendMessage(String message);
}
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
private MessageDao messageDao;
public void sendMessage(String message) {
messageDao.sendMessage(message);
}
}
3>创建Test类
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
MessageService messageService = context.getBean("messageServiceImpl",MessageServiceImpl.class);
messageService.sendMessage("发送消息了");
}
}

4>applicationContext.xml文件中添加
<context:component-scan base-package="com.test.activemq"/>

二、创建消费者项目

1.创建maven项目

2.添加spring-jms、jms规范、activemq依赖

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-apis</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.4</version>
</dependency>
</dependencies>

3.创建applicationContext.xml和applicationContext-jms.xml

applicationContext.xml中的配置内容:

<import resource="applicationContext-jms.xml"/>

applicationContext-jms.xml中的配置内容:

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="myQueue"/>
</bean>

4.具体实现接口和类
同步方式接收:
1>创建dao层接口和类
public interface MessageDao {
public String receiveMessage();
}
@Repository
public class MessageDaoImpl implements MessageDao {
@Autowired
private JmsTemplate jmsTemplate;
public String receiveMessage(){
String msg = "";
Message message = jmsTemplate.receive();
if (message instanceof TextMessage){
try {
msg = ((TextMessage) message).getText();
} catch (JMSException e) {
e.printStackTrace();
}
}
return msg;
}
}

2>创建service层接口和类
public interface MessageService {
public String receiveMessage();
}
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
private MessageDao messageDao;
public String receiveMessage() {
return messageDao.receiveMessage();
}
}

3>创建Test类
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
MessageService messageService = context.getBean("messageServiceImpl",MessageServiceImpl.class);
String message = messageService.receiveMessage();
System.out.println("接收到的消息是:"+message);
}
}
4>applicationContext.xml文件中添加
<context:component-scan base-package="com.test.jms"/>
三、消费者点对点模式-异步接收
需要使用监听器
1>创建maven项目
2>添加依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-apis</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.4</version>
</dependency>
</dependencies>
3>创建applicationContext.xml和applicationContext-jms.xml
<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--配置一个spring的jms消息监听器-->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="DestinationName" value="springQueue"/>
<property name="messageListener" ref="myMessageListener"/>

</bean>
<bean id="myMessageListener" class="com.test.jms.listener.MyMessageListener"/>
4>创建MyMessageListener类
/**
* 实现消息监听器
*/
public class MyMessageListener implements MessageListener {
/**
* 当消息监听器监听到消息后,会自动回调该onMessage方法
* 并且把监听到的消息回传给该方法
* @param message
*/
public void onMessage(Message message) {
if (message instanceof TextMessage){
try {
System.out.println("接收到的消息是:"+((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
5>创建Test测试类
public class Test {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
启动发现可以收到消息 console控制台打印出来的消息是: 接收到的消息是:发送消息了

发布订阅模式

同步和异步接收只是针对消费者而言的

发布订阅模式-同步接收

一、创建生产者

生产者和消费者的都配置成发布订阅模式

同步接收使用receive()接收

创建生产者需要在点对点模式的基础上在applicationContext-jms.xml文件中添加:

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="springTopic"/>
<!--pubSubDomain这个property对应模式true代表发布订阅,false代表点对点,默认是false,-->
<property name="pubSubDomain" value="true"/>
</bean>
同理,消费者也是在点对点模式的基础上做上述配置,后消费者先启动,再启动生产者

发布订阅模式-异步接收

 在异步基础上添加发布订阅的配置(生产者和消费者都需要配置)

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="springTopic"/>
<property name="pubSubDomain" value="true"/>
</bean>






猜你喜欢

转载自www.cnblogs.com/healthinfo/p/9567362.html