谷粒商城实战笔记-248-商城业务-消息队列-RabbitMQ简介

2024-08-23 19:44

本文主要是介绍谷粒商城实战笔记-248-商城业务-消息队列-RabbitMQ简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一,MQ基础
  • 二,JMS和AMQP
    • 1,二者区别
      • JMS
      • AMQP
      • 联系
      • 区别
    • 2,用法
      • 使用Spring-JMS
      • 使用Spring-Rabbit
      • Spring Boot自动配置

一,MQ基础

  1. 在大多数应用中,可以通过消息服务中间件来提升系统的异步通信能力和扩展解耦能力。

  2. 消息服务中有两个重要概念:消息代理(message broker)和目的地(destination)。当消息发送者发送消息后,消息代理会接管消息,并确保消息传递到指定的目的地。

  3. 消息队列主要有以下两种形式的目的地:

    • 队列(queue):用于点对点消息通信(point-to-point)。
    • 主题(topic):用于发布/订阅消息通信(publish/subscribe)。

根据您提供的文件内容,这里是一段关于消息队列通信模式和相关技术的介绍,具体内容如下:

  1. 点对点式通信

    • 消息发送者发送消息,消息代理将其放入一个队列中。
    • 消息接收者从队列中获取消息内容。
    • 消息读取后被移出队列。
    • 消息只有唯一的发送者和接收者,但并不是说只能有一个接收者。
  2. 发布订阅式通信

    • 发送者(发布者)发送消息到主题。
    • 多个接收者(订阅者)监听(订阅)这个主题。
    • 消息到达时,所有订阅者都会同时收到消息。
  3. JMS(Java Message Service)

    • 基于Java虚拟机(JVM)的消息代理规范。
    • ActiveMQ、HornetMQ等是JMS的实现。
  4. AMQP(Advanced Message Queuing Protocol)

    • 高级消息队列协议,也是一个消息代理的规范。
    • 兼容JMS。
    • RabbitMQ是AMQP的实现。

根据您提供的文件内容,这是一个比较JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol)的表格。下面是表格的内容和解释:

特征/协议JMS(Java Message Service)AMQP(Advanced Message Queuing Protocol)
定义Java API网络线级协议
跨语言
跨平台
Model提供两种消息模型: (1) Peer-2-Peer (2) Pub/sub提供了五种消息模型: (1) direct exchange (2) fanout exchange (3) topic exchange (4) headers exchange (5) system exchange 本质来讲,后四种和JMS的pub/sub模型没有太大差别, 仅是在路由机制上做了更详细的划分;
支持消息类型多种消息类型: TextMessage, MapMessage, BytesMessage, StreamMessage, ObjectMessage, Message(只有消息头和属性)byte[] 当实际应用时,有复杂的消息,可以将消息序列化后发送。
综合评价JMS定义了JAVA API层面的标准;在java体系中, 多个client均可以通过JMS进行交互,不需要应用修改代码,但是其对跨平台的支持较差;AMQP定义了wire-level层的协议标准;天然具有跨平台、跨语言特性。

根据您提供的文件内容,这是一段关于Spring框架对消息队列(MQ)的支持以及市场上常见的消息队列产品的介绍。以下是具体内容:

  1. Spring支持
  • spring-jms 提供了对 JMS 的支持。
  • spring-rabbit 提供了对 AMQP 的支持。
  • 需要 ConnectionFactory 的实现来连接消息代理。
  • 提供 JmsTemplateRabbitTemplate 来发送消息。
  • 使用 @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息。
  • 使用 @EnableJms@EnableRabbit 开启对 JMS 和 AMQP 的支持。
  1. Spring Boot自动配置
  • JmsAutoConfiguration:Spring Boot 自动配置 JMS。
  • RabbitAutoConfiguration:Spring Boot 自动配置 RabbitMQ。
  1. 市面的MQ产品
  • 市面上常见的消息队列产品包括:
    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka

二,JMS和AMQP

1,二者区别

JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol)。

JMS

想象一下,你正在经营一家大型连锁咖啡店,你需要一个系统来管理来自各个门店的订单请求。在这个场景中,JMS就像是这家咖啡店内部使用的通信规范或规则手册,它规定了各个门店应该如何发送订单请求以及总部应该如何接收这些请求。

  • 角色

    • 生产者:相当于门店发送订单请求。
    • 消费者:相当于总部接收并处理这些订单请求。
    • 消息中间件:相当于咖啡店内部的消息传递系统,比如RabbitMQ、ActiveMQ等。
  • 特点

    • 平台独立性:就像在不同地区的门店都可以按照这套规则来发送订单。
    • 抽象层:JMS提供了一组API,允许开发者以统一的方式编写消息传递的应用程序,而不必关心底层的消息中间件的具体实现。

AMQP

现在,想象你的咖啡店决定扩展业务,不仅要在本地使用这套系统,还要与其他合作伙伴共享这套订单管理系统。这时候,你需要一套更加开放的标准来保证不同系统之间能够顺畅沟通。AMQP就是这样一个标准,它是一种开放的协议,定义了消息如何在网络上传输。

  • 角色

    • 生产者:依然相当于门店发送订单请求。
    • 消费者:相当于总部或其他合作伙伴接收并处理这些订单请求。
    • 消息中间件:相当于实现了AMQP协议的消息队列服务,比如RabbitMQ就是一个支持AMQP的中间件。
  • 特点

    • 协议规范:AMQP定义了消息在网络上传输的具体格式和流程,确保不同的系统之间可以相互通信。
    • 开放性和互操作性:就像你的咖啡店不仅可以与本地门店交流,还可以与其他城市的合作伙伴甚至国际上的合作伙伴交流。

联系

  • 目的相同:两者都是为了实现分布式系统之间的消息传递。
  • 依赖于消息中间件:都需要有一个消息中间件来作为消息的传递枢纽。
  • 实现消息传递:都可以实现消息的发布/订阅模式或者点对点模式。

区别

  • 适用范围

    • JMS:主要用于Java环境,提供了Java API,因此更适合Java应用程序。
    • AMQP:是一个开放的协议,可以跨语言、跨平台使用,适用于更广泛的开发环境。
  • 灵活性和扩展性

    • JMS:提供了一套固定的API接口,虽然简化了开发过程,但可能限制了一些高级功能的实现。
    • AMQP:作为一个开放的协议,支持更多的特性和定制选项,可以更好地满足复杂需求。

2,用法

以下是一些示例代码,说明如何在Spring框架中使用spring-jmsspring-rabbit来支持JMS和AMQP消息队列,以及如何使用Spring Boot的自动配置功能。

使用Spring-JMS

  1. 配置ConnectionFactory:首先,您需要配置一个ConnectionFactory,这通常在XML配置文件或Java配置类中完成。
@Bean
public ConnectionFactory connectionFactory() {// 配置ConnectionFactory,例如使用ActiveMQreturn new ActiveMQConnectionFactory(url, username, password);
}
  1. 配置JmsTemplate:使用ConnectionFactory创建JmsTemplate
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {JmsTemplate template = new JmsTemplate(connectionFactory);// 其他配置...return template;
}
  1. 定义消息监听器:使用@JmsListener注解定义监听特定目的地的方法。
@Component
public class MyMessageListener {@JmsListener(destination = "myQueue")public void receiveMessage(String message) {// 处理接收到的消息}
}
  1. 开启JMS支持:在配置类上使用@EnableJms注解。
@Configuration
@EnableJms
public class JmsConfig {// 配置类内容
}

使用Spring-Rabbit

  1. 配置ConnectionFactory:与JMS类似,首先配置ConnectionFactory
@Bean
public ConnectionFactory rabbitConnectionFactory() {// 配置RabbitMQ的ConnectionFactoryreturn new CachingConnectionFactory(host, port, username, password);
}
  1. 配置RabbitTemplate:使用ConnectionFactory创建RabbitTemplate
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);// 其他配置...return template;
}
  1. 定义消息监听器:使用@RabbitListener注解定义监听特定队列的方法。
@Component
public class MyRabbitListener {@RabbitListener(queues = "myQueue")public void handleMessage(String message) {// 处理接收到的消息}
}
  1. 开启RabbitMQ支持:在配置类上使用@EnableRabbit注解。
@Configuration
@EnableRabbit
public class RabbitConfig {// 配置类内容
}

Spring Boot自动配置

Spring Boot提供了自动配置功能,可以简化上述配置步骤。如果您使用的是Spring Boot,通常只需要添加相应的依赖并进行少量配置即可。

  1. 添加依赖:在pom.xmlbuild.gradle中添加Spring-JMS或Spring-Rabbit的依赖。

  2. 配置application.properties或application.yml:配置连接信息和目的地名称。

# JMS配置示例
spring.jms.activemq.broker-url=tcp://localhost:61616
spring.jms.queue-names=myQueue# RabbitMQ配置示例
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.queue=myQueue
  1. 使用自动配置:Spring Boot会自动配置ConnectionFactoryJmsTemplateRabbitTemplate等组件,并注册相应的监听器容器。

这篇关于谷粒商城实战笔记-248-商城业务-消息队列-RabbitMQ简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100322

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹