异步消息的主要目的是解决跨系统的通信。所谓异步消息,即发送信息者无须等待消息接收者的处理及返回,甚至无须关心消息是否发送与接受成功。在异步消息中有两个极其重要的概念,即消息代理和目的地。当消息发送者发送信息后,消息将有消息代理管理,消息代理保证消息传递到目的的。
JMS(Java 消息服务)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行信息交换,并且提供标准的产生,发送,接受消息的接口简化企业应用的开发
JMS由以下元素组成:
1:JMS消息代理实现
2:JSM客户
3:JMS生产者
4:JMS消费者
5:JMS消息
6:JMS队列
7:JMS主题
http://activemq.apache.org/ 去官网下载适合自己的版本 然后点开wrapper.exe或者activemq.bat启动
spring.activemq.broker-url=tcp://localhost:61616
在sender包下创建MyMessage类 具体代码如下
- package com.ch.ch8_1sender;
- import java.util.ArrayList;
- import javax.jms.JMSException;
- import javax.jms.MapMessage;
- import javax.jms.Message;
- import javax.jms.Session;
- import org.springframework.jms.core.MessageCreator;
- public class MyMessage implements MessageCreator{
- @Override
- public Message createMessage(Session session) throws JMSException {
- MapMessage mapm = session.createMapMessage();
- ArrayList
arrayList = new ArrayList(); - arrayList.add("陈恒1");
- arrayList.add("陈恒2");
- mapm.setObject("mesg1", arrayList);//只能存Java的基本对象
- mapm.setString("mesg2", "测试消息2");
- return mapm;
- }
- }
- package com.ch.ch8_1sender;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.CommandLineRunner;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.jms.core.JmsTemplate;
- @SpringBootApplication
- public class Ch81SenderApplication implements CommandLineRunner{
- @Autowired
- private JmsTemplate jmsTemplate;
- public static void main(String[] args) {
- SpringApplication.run(Ch81SenderApplication.class, args);
- }
- /**
- * 我们这里为了方便操作使用run方法发送消息,
- * 当然完全可以使用控制器通过Web访问
- */
- @Override
- public void run(String... args) throws Exception {
- //new MyMessage()回调接口方法createMessage产生消息
- jmsTemplate.send("mydestination", new MyMessage());
- }
- }
- package com.ch.ch8_1receive;
- import java.util.ArrayList;
- import javax.jms.JMSException;
- import javax.jms.MapMessage;
- import org.springframework.jms.annotation.JmsListener;
- import org.springframework.stereotype.Component;
- @Component
- public class ReceiverMsg {
- @JmsListener(destination="mydestination")
- public void receiverMessage(MapMessage mapm) throws JMSException {
- @SuppressWarnings("unchecked")
- ArrayList
arrayList = (ArrayList)mapm.getObject("mesg1"); - System.out.println(arrayList);
- System.out.println(mapm.getString("mesg2"));
- }
- }