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"));
  }
}
相关文章
|
5月前
|
消息中间件 存储 Java
RabbitMQ 和 Spring Cloud Stream 实现异步通信
本文介绍了在微服务架构中,如何利用 RabbitMQ 作为消息代理,并结合 Spring Cloud Stream 实现高效的异步通信。内容涵盖异步通信的优势、RabbitMQ 的核心概念与特性、Spring Cloud Stream 的功能及其与 RabbitMQ 的集成方式。通过这种组合,开发者可以构建出具备高可用性、可扩展性和弹性的分布式系统,满足现代应用对快速响应和可靠消息传递的需求。
310 2
RabbitMQ 和 Spring Cloud Stream 实现异步通信
|
7月前
|
人工智能 安全 Java
Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
在Java开发中,处理大规模数据时常常需要将列表拆分为多个子列表进行异步处理并汇总结果。本文介绍如何在Spring Boot中使用Function和异步线程池实现高效且可维护的代码,涵盖结果封装、线程池配置、列表拆分处理及结果汇总等关键步骤。
336 0
|
自然语言处理 JavaScript Java
Spring 实现 3 种异步流式接口,干掉接口超时烦恼
本文介绍了处理耗时接口的几种异步流式技术,包括 `ResponseBodyEmitter`、`SseEmitter` 和 `StreamingResponseBody`。这些工具可在执行耗时操作时不断向客户端响应处理结果,提升用户体验和系统性能。`ResponseBodyEmitter` 适用于动态生成内容场景,如文件上传进度;`SseEmitter` 用于实时消息推送,如状态更新;`StreamingResponseBody` 则适合大数据量传输,避免内存溢出。文中提供了具体示例和 GitHub 地址,帮助读者更好地理解和应用这些技术。
2580 121
|
11月前
|
消息中间件 Java API
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ—— JMS 和 ActiveMQ 介绍
本文介绍如何在Spring Boot中集成ActiveMQ,首先阐述了JMS(Java消息服务)的概念及其作为与具体平台无关的API在异步通信中的作用。接着说明了JMS的主要对象模型,如连接工厂、会话、生产者和消费者等,并指出JMS支持点对点和发布/订阅两种消息类型。随后重点讲解了ActiveMQ,作为Apache开源的消息总线,它完全支持JMS规范,适用于异步消息处理。最后,文章探讨了在Spring Boot中使用队列(Queue)和主题(Topic)这两种消息通信形式的方法。
377 0
|
11月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
468 0
|
Java Spring 容器
Spring使用异步注解@Async正确姿势
Spring使用异步注解@Async正确姿势,异步任务,spring boot
292 3
|
监控 Java API
Spring Boot中的异步革命:构建高性能的现代Web应用
【8月更文挑战第29天】Spring Boot 是一个简化 Spring 应用开发与部署的框架。异步任务处理通过后台线程执行耗时操作,提升用户体验和系统并发能力。要在 Spring Boot 中启用异步任务,需在配置类上添加 `@EnableAsync` 注解,并定义一个自定义的 `ThreadPoolTaskExecutor` 或使用默认线程池。通过 `@Async` 注解的方法将在异步线程中执行。异步任务适用于发送电子邮件、数据处理、外部 API 调用和定时任务等场景。最佳实践中应注意正确配置线程池、处理返回值和异常、以及监控任务状态,确保系统的稳定性和健壮性。
261 0
|
4月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
4月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。

热门文章

最新文章