Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ

文章目录
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
RabbitMQ简介
引入依赖
编写配置
编写接口
启用Rabbit注解
消息监听
消息测试
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
Spring Boot 2 整合RabbitMQ案例。

RabbitMQ简介
简介
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。
核心概念
Message
消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组
成,这些属性包括routing-key(路由键)、 priority(相对于其他消息的优先权)、 delivery-mode(指出
该消息可能需要持久性存储)等。
Publisher
消息的生产者,也是一个向交换器发布消息的客户端应用程序。
Exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型: direct(默认), fanout, topic, 和headers,不同类型的Exchange转发消息的策略有
所区别。
Queue
消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息
可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
Binding
绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连
接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
Exchange 和Queue的绑定可以是多对多的关系。
Connection
网络连接,比如一个TCP连接。
Channel
信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚
拟连接, AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这
些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所
以引入了信道的概念,以复用一条 TCP 连接。
Consumer
消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。
Virtual Host
虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加
密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有
自己的队列、交换器、绑定和权限机制。 vhost 是 AMQP 概念的基础,必须在连接时指定,
RabbitMQ 默认的 vhost 是 / 。
Broker
表示消息队列服务器实体

引入依赖
利用Spring Initializr快速创建一个Spring Boot项目spring-boot-v2-amqp,主要依赖如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

编写配置
添加RabbitMQ的配置信息。RabbbitMQ安装请参阅 Docker安装RabbitMQ

spring:
rabbitmq:
host: 192.168.0.2 # RabbitMQ主机IP
port: 5672 # 默认5672,一致可不写
username: guest # 默认guest,一致可不写
password: guest # 默认guest,一致可不写
# virtual-host: / # 默认是"/",一致可不写,public void setVirtualHost(String virtualHost) {this.virtualHost = "".equals(virtualHost) ? "/": virtualHost;}

编写接口
新建一个AmqpController,用于发送消息

@RestController
public class AmqpController {

private final RabbitTemplate rabbitTemplate;

public AmqpController(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}

private final static String SUCCESS = "success";

/**
* 单点
* @param msg
* @return
*/
@GetMapping("/direct")
public String direct(String msg){
rabbitTemplate.convertAndSend("amq.direct", "xudc", msg);
return SUCCESS;
}

@GetMapping("/fanout")
public String fanout(String msg) {
rabbitTemplate.convertAndSend("amq.fanout", "", msg);
return SUCCESS;
}

@GetMapping("/topic")
public String topic(String msg){
rabbitTemplate.convertAndSend("amq.topic", "xudc.#", msg);
return SUCCESS;
}
}

启用Rabbit注解
在主启动类上加上注解@EnableRabbit

@SpringBootApplication
@EnableRabbit // 开启基于注解的RabbitMQ模式
public class SpringBootAmqpApplication {

public static void main(String[] args) {
SpringApplication.run(SpringBootAmqpApplication.class, args);
}
}

消息监听
编写消息监听者

@Component
public class AmqpListener {

@RabbitListener(queues = "xudc")
public void receive1(String message) {
System.err.println("xudc -- receive1接收到消息:" + message);
}

@RabbitListener(queues = "xudc.book")
public void receive2(String message) {
System.err.println("xudc.book -- receive2接收到消息:" + message);
}

@RabbitListener(queues = "andy")
public void receive3(String message) {
System.err.println("andy -- receive3接收到消息:" + message);
}
}

消息测试
direct
fanout
topic
至此,实现了Spring Boot和RabbitMQ的简单整合。
————————————————
版权声明:本文为CSDN博主「xudc」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xudc0521/article/details/89362348

原文地址:https://www.cnblogs.com/weizhxa/p/12100192.html

时间: 2024-11-07 23:15:13

Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ的相关文章

Spring 5.x 、Spring Boot 2.x 、Spring Cloud 与常用技术栈整合

本项目仓库提供spring.spring-boot.spring-cloud 的常用整合用例.每个用例都提供详细的图文说明,并给出官方文档的具体链接作为参考.随着spring的迭代,本仓库会持续更新,升级版本和丰富用例. 仓库地址:https://github.com/heibaiying/spring-samples-for-all 版本说明: Spring: 5.1.3.RELEASE Spring-Boot:2.1.1.RELEASE Spring-Cloud:Finchley.SR2 目

spring boot 1.5.6版本整合LCN5.0

最新在更新LCN,由4.0更新到了5.0,这里说说更新遇到的问题,官方在5.0.1版本开始兼容了springboot1.5版本,但是整合的时候还是需要注意一些问题. 1.maven的引包需要改变,本人使用的是最新的5.0.2版本 <-- 下面两个包的版本号最好与springboot版本一致,在txlcn-tc中,引入了这两个包,并且版本号为2.0.5,该操作用于覆盖2.0.5版本的包 --> <dependency> <groupId>org.springframewo

使用 Spring Boot 快速构建 Spring 框架应用--转

原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面.如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题.每个子项目都有一定

使用 Spring Boot 快速构建 Spring 框架应用,PropertyPlaceholderConfigurer

Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面.如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题.每个子项目都有一定的学习曲线.开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案.在如何使用这些组件上

使用 Spring Boot 快速构建 Spring 框架应用

Spring Boot 的目的在于快速创建可以独立运行的 Spring 应用.通过 Spring Boot 可以根据相应的模板快速创建应用并运行.Spring Boot 可以自动配置 Spring 的各种组件,并不依赖代码生成和 XML 配置文件.Spring Boot 可以大大提升使用 Spring 框架时的开发效率. Why we choose Spring Boot ? Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应

【Spring Boot&amp;&amp;Spring Cloud系列】Spring Boot初识

一.Spring Boot优点 为Spring开发提供更加简单的使用和快速开发的技巧 具有开箱即用的默认配置功能,能根据项目依赖自动配置 具有功能更加强大的服务体系,包括嵌入式服务.安全.性能指标.健康检查等 绝对没有代码生成,可以不再需要XML配置,即可让应用更加轻巧和灵活 对于第三方技术的使用,提供了非常完美的整合 二.项目创建方式 使用Maven新建项目 使用Spring Initializr新建项目(参见之前的文章) 三.基本依赖配置 1 <parent> 2 <groupId&

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

在上节中我们通过了一个小的入门案例已经看到了Spring Boot的强大和简单之处.本章将详细介绍Spring Boot的核心注解,基本配置和运行机制.笔者一直认为:精通一个技术一定要深入了解这个技术帮助我们做了哪些动作,深入理解它底层的运行原理,只有达到这个目标才可以熟练使用框架,最终达到融会贯通的目的. 一.启动类与@SpringBootApplication Spring Boot的项目一般都会有注解*Application标注的入口类,入口类中会有一个main方法,main方法是一个标准

《01.Spring Boot连载:Spring Boot入门介绍》

1 Spring Boot的概述 Spring Boot是开发者和Spring 本身框架的中间层,帮助开发者统筹管理应用的配置,提供基于实际开发中常见配置的默认处理(即习惯优于配置),简化应用的开发,简化应用的运维:总的来说,其目的Spring Boot就是为了对Java web 的开发进行"简化"和加"快"速度,简化开发过程中引入或启动相关Spring 功能的配置.这样带来的好处就是降低开发人员对于框架的关注点,可以把更多的精力放在自己的业务代码上. 同时随着微服

Spring Boot教程35——Spring Data JPA

Hibernate是数据访问解决技术的绝对霸主.JPA是由Hibernate主导的一个基于O/R映射的标准规范.O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术. Spring Data JPA介绍 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可: public interface PersonRepository extends Jpa