RabbitMQ项目实战(一)

文章目录

  • RabbitMQ项目实战
    • 选择客户端
    • 基础实战

前情提要:我们了解了消息队列,RabbitMQ的入门,交换机,以及核心特性等知识,现在终于来到了激动人心的项目实战环节!本小节主要介绍通过Spring Boot RabbitMQ Starter 在SpringBoot项目中跑通测试RabbitMQ,话不多说,我们马上开始!

RabbitMQ项目实战

选择客户端

怎么在项目中使用RabbitMQ?

  1. 使用官方的客户端(类比jdbc)

优点:兼容性好,换语言成本低,比较灵活
缺点:太灵活,要自己去处理一些事情,比如要自己维护管理链接,很麻烦

  1. 使用封装好的客户端,比如Spring Boot RabbitMQ Starter(类比mybatis)

优点:简单易用,直接配置直接用,更方便地去管理链接
缺点:不够灵活,被框架限制

基础实战

我们使用Spring Boot RabbitMQ Starter
https://spring.io/guides/gs/messaging-rabbitmq/

  1. 引入依赖
    注意:使用的版本一定要和你的springboot版本一致,去maven中心仓库中找版本一致的
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>2.7.2</version>
</dependency>

2) 在yml中引入配置

spring:rabbitmq:host: localhostport: 5672password: guestusername: guest

3)创建交换机和队列,一般在项目启动之前执行创建一次即可

package com.yupi.springbootinit.bimq;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;/*** 用于创建测试程序用到的交换机和队列(只用在程序启动前执行一次)*/
public class MqInitMain {public static void main(String[] args) {try{ConnectionFactory factory  = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();String EXCHANGE_NAME = "code_exchange";channel.exchangeDeclare(EXCHANGE_NAME,"direct");String queueName = "code_queue";channel.queueDeclare(queueName,true,false,false,null);channel.queueBind(queueName,EXCHANGE_NAME,"my_routingKey");}catch (Exception e){}}
}

4)生产者代码

package com.yupi.springbootinit.bimq;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;import javax.annotation.Resource;@Component
public class MyMessageProducer {@Resourceprivate RabbitTemplate rabbitTemplate;public void sendMessage(String exchange,String routingKey,String message){rabbitTemplate.convertAndSend(exchange,routingKey,message);}
}

5)消费者代码

package com.yupi.springbootinit.bimq;import com.rabbitmq.client.Channel;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;@Component
@Slf4j
public class MyMessageConsumer {//使用@SneakyThrows注解简化异常处理//使得你可以在不声明抛出异常的方法中抛出受检异常,而无需捕获它们。这在一些特定情况下可能会很有用,但通常不建议频繁使用,因为它可能会破坏代码的可读性和健壮性。@SneakyThrows//使用@RabbitListener注解指定要监听的队列名称为"code_queue",并设置消息的确认机制为手动确认@RabbitListener(queues = {"code_queue"},ackMode = "MUNAL")// // 在RabbitMQ中,每条消息都会被分配一个唯一的投递标签,用于标识该消息在通道中的投递状态和顺序。通过使用@Header(AmqpHeaders.DELIVERY_TAG)注解,可以从消息头中提取出该投递标签,并将其赋值给long deliveryTag参数。public void reciveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliverttag){log.info("receiveMessage message = {}", message);//手动确认消息的接收channel.basicAck(deliverttag,false);}
}

测试类测试

package com.yupi.springbootinit.bimq;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class MyMessageProducerTest {@Resourceprivate MyMessageProducer myMessageProducer;@Testvoid sendMessage() {myMessageProducer.sendMessage("code_exchange", "my_routingKey", "你好呀");}
}

image.png
打印出了日志,说明消费者收到了消息,测试通过!
既然测试已经通过,接下来那就把它运用到项目中去吧!欲知后事如何,且听下回分解~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(三)

13 测试方案和测量结果 测量一个边长为1米的正方形&#xff0c;取三个顶点分别作为O、A、B点。 在O点上方&#xff0c;用细线悬挂激光笔&#xff0c;激光笔常亮向下指示&#xff0c;静止时激光笔的光点和O点重合。 将两个D8M摄像头子卡插到DE10-Nano开发板上&#xff0c;放…

MySQL Linux环境安装部署

目录 1、mysql安装包下载 2、安装mysql服务 3、启动mysql服务 4、登录mysql服务 1、mysql安装包下载 1、查看centos的版本 cat /etc/redhat-release 2、进入官网地址下载对应系统版本的安装包 地址&#xff1a;MySQL :: Download MySQL Yum Repository 2、安装mysql服务 …

恒峰智慧科技-森林消防便捷泵:轻松应对火灾危机!

在广袤无垠的森林中&#xff0c;绿色是生命的象征&#xff0c;是自然的馈赠。然而&#xff0c;当火魔无情地吞噬这片生命的绿洲时&#xff0c;我们需要一种快速、高效、可靠的消防工具来守护这片绿色。此时&#xff0c;森林消防便捷泵应运而生&#xff0c;成为了守护森林安全的…

Oracle数据库 :查询表结构脚本

查询脚本 &#xff1a; SELECT CASE WHEN a.column_id1 THEN a.TABLE_NAME ELSE END AS 表名, a.column_id AS 序号, a.column_name as 列名, REPLACE(comments, CHR(10), ) as 列说明, a.data_type || ( || a.data_length || ) as 数据类型, a.DATA_LENGTH AS 长度, a.DATA_…

idea中停止运行Vue

在里面敲入Ctrlc 输入y确定即可。

【微服务-Ribbon】什么是负载均衡?微服务中负载均衡有哪些策略呢?

前面几篇文章&#xff0c;我们了解了一下Nacos的单机部署、集群部署以及微服务接入Nacos的步骤。从本篇开始&#xff0c;我们来看一下微服务第二个通用组件-负载均衡&#xff08;Ribbon&#xff09;。 1、Ribbon负载均衡器 负载均衡顾名思义&#xff0c;是指通过软件或者硬件…

电能质量分析仪是什么

TH-6500电能质量分析仪是一种用于记录和分析现场电能质量参数的设备。它能够检测并记录电力系统的电压波动、频率偏差、谐波、三相不平衡等参数&#xff0c;帮助用户了解电力系统的运行状态&#xff0c;及时发现并解决潜在的电能质量问题。 该设备具备多种测量功能&#xff0c…

嵌入式工程师有哪些必备技能,和电子爱好者有很大区别!

要掌握的技能实际上是非常多的。在这里&#xff0c;我来结合自己亲身经历&#xff0c;从技术、思维、项目管理等方面来谈一下我认为嵌入式开发需要掌握的技能。 技术方面 C语言和汇编语言能力 C语言是嵌入式开发最核心的编程语言。在我的初学阶段&#xff0c;我花费了很多时间…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(4)——架构分析 - 核心操作提示词构造

4.4.4.核心操作与提示词构造 &#xff08;1&#xff09;感知 0.根据vision_r参数&#xff0c;获取NPC周边(2*vision_r 1) **2个tile 1.将这些空间信息存储在NPC的空间记忆字典树 2.基于0的范围&#xff0c;获取当前NPC所在arena的所有事件&#xff0c;计算事件源距离NPC的…

我用AI帮我画刘亦菲写真,绘画写真某一天是否可以取代照相馆?

我用AI帮我画刘亦菲写真&#xff0c;绘画写真某一天是否可以取代照相馆&#xff1f; 最近我试了用FaceChain人物写真生成来测试帮我绘图&#xff0c;为了不翻车&#xff0c;我在网上随便找了刘亦菲的日常照片10多张左右作为训练原图。 真随便找的 生成效果有多种选择 下面…

【问题处理】银河麒麟操作系统实例分享,服务器操作系统VNC远程问题分析

1.服务器环境以及配置 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 0518-server 2.问题现象描述 服务器通过vncserver:1.service服务启动的vnc服务后&#xff0c;普通用户用vnc连接时&#xff0c;锁屏后&#xff0c;然后输入登陆密码会报密码错误&…

备考2024年小学生古诗文大会:吃透历年真题和知识点(持续讲题)

对上海小学生的小升初和各种评优争章来说&#xff0c;语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛&#xff0c;小学生古诗文大会和汉字小达人通常是必不可少的&#xff0c;因为这两个针对性强&#xff0c;而且具有很强的上海本地特色。 根据往…

【nnUNetv2进阶】六、nnUNetv2 魔改网络-小试牛刀-加入注意力机制CBAM

nnUNet是一个自适应的深度学习框架&#xff0c;专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点&#xff1a; 自适应框架&#xff1a;nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等&#xff0c;从而避免了繁琐的手工调参过程。 自动化流程&a…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时&#xff0c;批量工具可以更好的提升效率。通过本指南&#xff0c;你将了解如何批量上传全球商品&#xff0c;本指南适用于所有站点。 一、什么是批量上传&#xff1f; 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

一文教您理解Playwright是如何实现动态等待的

使用过Playwright的同学都会有这样的感受&#xff0c;Playwright对UI页面中元素的识别非常稳定&#xff0c;这离不开其强大的动态等待机制&#xff01;简单的解释就是&#xff0c;Playwright在对UI页面中的任何元素操作之前&#xff0c;都需要做出一些列的校验工作来确保能够稳…

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中&#xff0c;我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具&#xff0c;它们可以对一组值执行计算并返回单个值。例如&#xff0c;聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…

【Linux】网络与守护进程

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 &#x1f449;&#x1f3fb;守护…

面试八股——集合——List

主要问题 数组 如果数组索引从0开始时&#xff0c;数组的寻址方式为&#xff1a; 如果数组索引从1开始时&#xff0c;数组的寻址方式为&#xff1a; 此时对于CPU来说增加了一个减法指令&#xff0c;降低寻址效率。 ArrayList⭐ ArrayList构造函数 尤其说一下第三个构造函数流…

【复习笔记】FreeRTOS(五)时间片调度

本文是FreeRTOS复习笔记的第五节&#xff0c;时间片调度。 上一篇文章&#xff1a; 【复习笔记】reeRTOS(四) 列表项的插入和删除 文章目录 1.时间片调度简介1.1. 运行过程 二、实验设计三、测试例程四、实验效果 1.时间片调度简介 FreeRTOS支持多个任务同时拥有一个优先级&am…

设计千万级并发系统架构需要考虑的各方面因素

设计千万级并发系统架构需要考虑多方面因素&#xff0c;包括系统的可伸缩性、高可用性、性能、安全性等。 1、分布式架构&#xff1a; 使用微服务架构&#xff1a;将系统拆分成多个独立的服务&#xff0c;每个服务都可以独立部署和扩展。 使用分布式服务框架&#xff1a;如S…