【RabbitMQ】注册成功后的通知操作
创始人
2024-05-24 17:41:07
0

目录

  • 前提说明
  • 代码实现
    • 1. 依赖
    • 2. 配置类
    • 3. 生产方
    • 创建测试类,目的:查看是否队列交换机创建成功,且在队列里面是否有一条待消费的信息。
    • 4. 消费方
  • 最后

前提说明

背景条件:主要是自己学完了RabbitMQ后,想自己多去动手实践实践。

具体的需求:用户在注册成功以后,需要发送一条邮件消息,通知用户注册成功。

为什么要采用MQ

  • 巩固复习
  • 采用异步的操作,主要是为了避免容许出错操作的失败导致已经成功的操作回滚。

具体使用的技术

  • Springboot
  • RabbitMQ 3.11.4
  • Erlang 25.1
  • jdk 8

步骤图
在这里插入图片描述

  • 说一下,我为什么采用的是Direct 模式:

    假如以后需求需要变动的话,那么可以通过 改变routing key 来改变队列。

  • 文字阐述一下具体的步骤:

    1. 创建交换机以及队列,并实现他们的绑定关系
    2. 在生产方,也就是注册完成后,需要调用API去指定 交换机名 以及 队列名 以及 发送信息表示已经注册成功。
    3. 在消费方,如果有发送信息为注册成功,则表示我可以进行邮件发送操作了。
  • 考虑到注册成功后邮件发送的行为主要是一个辅助操作,不要求必须成功,所以不需要保证其操作必须成功。

代码实现

代码组成结构
在这里插入图片描述

1. 依赖

org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-starter-amqp

2. 配置类

@Configuration
public class RabbitmqConfig {/*** 1. 创建交换机*/@Beanpublic DirectExchange directExchange(){// 创建一条 DirectExchange 路由模式的交换机:名称为 order_direct_exchange,持久化,不自动删除return new DirectExchange("direct_exchange", true, false);}/*** 2. 创建队列*/@Beanpublic Queue emailQueue(){// 构造一个新队列,指定名称emailQueue、持久性、可以绑定其他的交换机和不自动删除标志。return new Queue("emailQueue" , true, false,false );}/*** 3. 绑定队列以及交换机*/@Beanpublic Binding emailDirectBinding(){return BindingBuilder.bind(emailQueue()).to(directExchange()).with("email");}
}

3. 生产方

@Service
public class UserServiceImpl {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 模拟业务操作*/public void register(){// do somethingSystem.out.println("用户已经注册完成,开始异步用MQ发送消息,其中的routing key为:email,通知用户注册完成");// 向队列发送消息:队列名称为direct_exchange,路由key为email,发送主体为字符串registerSuccessrabbitTemplate.convertAndSend("direct_exchange", "email", "registerSuccess");}
}

创建测试类,目的:查看是否队列交换机创建成功,且在队列里面是否有一条待消费的信息。

@SpringBootTest
public class TestRegisterMQ {@Autowiredprivate UserServiceImpl userServiceImpl;/*** 1、 进行生产测试,查看消息是否MQ已经发送到指定的Queue里面*/@Testvoid testRegister(){userServiceImpl.register();}
}

此时,控制台打印出来:
在这里插入图片描述
在浏览器输入网址:http://localhost:15672,输入账户即可进入rabbitmq后台管理页面(默认为guest/guest)

可以查看到已经创建出队列以及交换机并且实现了绑定关系。
在这里插入图片描述
我们再查看队列里面是否有一条待消费的信息:
在这里插入图片描述
从上述步骤,我们就可以看出,已经生产出一条待消费的信息。

4. 消费方

// 监听的队列为 emailQueue
@RabbitListener(queues = {"emailQueue"})
@Service
public class EmailServiceImpl {// 通过传递的不同发送主体,进行消息处理@RabbitHandlerpublic void sendEmail(String msg){System.out.println("消息方接收到的消息为" + msg);System.out.println("现在正在进行邮件发送处理。。。。。。");// do something}
}

启动主启动类,会看到消息已经被消费:

控制台是确定是否已经接受到信息:
在这里插入图片描述
我们进一步确认,在队列里面阻塞的消息是否已经被消费:
在这里插入图片描述

最后

至此,一个简单的使用场景就已经实现完毕了。

如果对RabbiMQ有不了解的地方,可以查看相应的笔记:【RabbitMQ】学习笔记

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...