• Spring Boot中异步消息JMS的讲解与通信实例


    异步消息的主要目的是解决跨系统的通信。所谓异步消息,即发送信息者无须等待消息接收者的处理及返回,甚至无须关心消息是否发送与接受成功。在异步消息中有两个极其重要的概念,即消息代理和目的地。当消息发送者发送信息后,消息将有消息代理管理,消息代理保证消息传递到目的的。

    JMS(Java 消息服务)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行信息交换,并且提供标准的产生,发送,接受消息的接口简化企业应用的开发 

    JMS由以下元素组成:

    1:JMS消息代理实现

    2:JSM客户

    3:JMS生产者

    4:JMS消费者

    5:JMS消息

    6:JMS队列

    7:JMS主题

     JMS异步消息通信实例

    1:下载JMS的一种实现ActiveMQ

    http://activemq.apache.org/ 去官网下载适合自己的版本 然后点开wrapper.exe或者activemq.bat启动

    2:创建消息发送者Spring Boot Web应用ch8_1Sender

    3:在application.properties配置文件中添加如下内容

    spring.activemq.broker-url=tcp://localhost:61616

     4:定义消息

    在sender包下创建MyMessage类 具体代码如下

    1. package com.ch.ch8_1sender;
    2. import java.util.ArrayList;
    3. import javax.jms.JMSException;
    4. import javax.jms.MapMessage;
    5. import javax.jms.Message;
    6. import javax.jms.Session;
    7. import org.springframework.jms.core.MessageCreator;
    8. public class MyMessage implements MessageCreator{
    9. @Override
    10. public Message createMessage(Session session) throws JMSException {
    11. MapMessage mapm = session.createMapMessage();
    12. ArrayList arrayList = new ArrayList();
    13. arrayList.add("陈恒1");
    14. arrayList.add("陈恒2");
    15. mapm.setObject("mesg1", arrayList);//只能存Java的基本对象
    16. mapm.setString("mesg2", "测试消息2");
    17. return mapm;
    18. }
    19. }

    5:在ch8_1Sender的主类中实现接口 具体代码如下

    1. package com.ch.ch8_1sender;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.boot.CommandLineRunner;
    4. import org.springframework.boot.SpringApplication;
    5. import org.springframework.boot.autoconfigure.SpringBootApplication;
    6. import org.springframework.jms.core.JmsTemplate;
    7. @SpringBootApplication
    8. public class Ch81SenderApplication implements CommandLineRunner{
    9. @Autowired
    10. private JmsTemplate jmsTemplate;
    11. public static void main(String[] args) {
    12. SpringApplication.run(Ch81SenderApplication.class, args);
    13. }
    14. /**
    15. * 我们这里为了方便操作使用run方法发送消息,
    16. * 当然完全可以使用控制器通过Web访问
    17. */
    18. @Override
    19. public void run(String... args) throws Exception {
    20. //new MyMessage()回调接口方法createMessage产生消息
    21. jmsTemplate.send("mydestination", new MyMessage());
    22. }
    23. }

    6:按照上面的步骤创建信息接收者ch8_1Receive

    7:在receive包中创建监听器类ReceiverMsg

    1. package com.ch.ch8_1receive;
    2. import java.util.ArrayList;
    3. import javax.jms.JMSException;
    4. import javax.jms.MapMessage;
    5. import org.springframework.jms.annotation.JmsListener;
    6. import org.springframework.stereotype.Component;
    7. @Component
    8. public class ReceiverMsg {
    9. @JmsListener(destination="mydestination")
    10. public void receiverMessage(MapMessage mapm) throws JMSException {
    11. @SuppressWarnings("unchecked")
    12. ArrayList arrayList = (ArrayList)mapm.getObject("mesg1");
    13. System.out.println(arrayList);
    14. System.out.println(mapm.getString("mesg2"));
    15. }
    16. }

  • 相关阅读:
    Doris扩容和缩容
    计算机毕业设计之java+ssm在线心理评测与咨询系统
    应用日志采集是什么意思?批量采集应用日志软件用哪个?怎么操作?
    DHTMLX JS Gantt Library 7.1.13
    【Linux】进程概念讲解
    Error:$ is not defined ,vue 项目中引入 jquery 报错及解决方法
    【OpenCV4】cv::Mat.isContinuous() 函数判断内存是否连续(c++)
    我要写整个中文互联网界最牛逼的JVM系列教程 | 「类加载子系统」章节:ClassLoader的常用方法及其获取方法
    SBT40100VFCT-ASEMI塑封肖特基二极管SBT40100VFCT
    FPGA project : sdram
  • 原文地址:https://blog.csdn.net/jiebaoshayebuhui/article/details/127578780