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

简介: 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类 具体代码如下

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<String> arrayList = new ArrayList<String>();
    arrayList.add("陈恒1");
    arrayList.add("陈恒2");
    mapm.setObject("mesg1", arrayList);//只能存Java的基本对象
    mapm.setString("mesg2", "测试消息2");
    return mapm;
  }
}

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

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());
  }
}

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

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

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<String> arrayList = (ArrayList<String>)mapm.getObject("mesg1");
    System.out.println(arrayList);
    System.out.println(mapm.getString("mesg2"));
  }
}
相关文章
|
1天前
|
监控 前端开发 网络协议
如何使用Spring Boot实现WebSocket通信
如何使用Spring Boot实现WebSocket通信
|
1天前
|
安全 Java 数据库连接
Spring Boot 优雅关机时异步线程安全优化
Spring Boot 优雅关机时异步线程安全优化
7 1
|
4天前
|
消息中间件 Java API
Spring Boot与JMS消息中间件的集成
Spring Boot与JMS消息中间件的集成
|
4天前
|
监控 网络协议 Java
使用Spring Boot和WebSocket实现实时通信
使用Spring Boot和WebSocket实现实时通信
|
4天前
|
网络协议 Java 微服务
Spring Boot中集成RSocket实现面向服务的通信
Spring Boot中集成RSocket实现面向服务的通信
|
4天前
|
消息中间件 Java 机器人
Spring Boot与JMS消息中间件的集成
Spring Boot与JMS消息中间件的集成
|
4天前
|
监控 前端开发 网络协议
如何使用Spring Boot实现WebSocket通信
如何使用Spring Boot实现WebSocket通信
|
6天前
|
监控 安全 Java
Spring Boot优雅Shutdown时异步线程安全优化
Spring Boot优雅Shutdown时异步线程安全优化
|
8天前
|
消息中间件 存储 Java
后端开发Spring框架之消息介绍 同步异步 JMS AMQP MQTT Kafka介绍
后端开发Spring框架之消息介绍 同步异步 JMS AMQP MQTT Kafka介绍
10 0
|
1天前
|
前端开发 Java 微服务
Spring Boot与微前端架构的集成开发
Spring Boot与微前端架构的集成开发