整合RabbitMQ实现消息异步发送

news2025/1/11 2:25:28

消息队列中间件
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削峰等问题。
中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。
使用较多的消息队列有 ActiveMQ(安全),RabbitMQ,ZeroMQ,Kafka(大数据),MetaMQ,RocketMQ。

AMQP高级消息队列协议
AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ
RabbitMQ 是一个开源的 AMQP 实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。

RabbitMQ的优势
可靠性(Reliablity):使用了一些机制来保证可靠性,比如持久化、传输确认、发布确认。
灵活的路由(Flexible Routing):在消息进入队列之前,通过Exchange来路由消息。对于典型的路由功能,Rabbit已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也通过插件机制实现自己的Exchange。
消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
高可用(Highly Avaliable Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
多种协议(Multi-protocol):支持多种消息队列协议,如STOMP、MQTT等。
多种语言客户端(Many Clients):几乎支持所有常用语言,比如Java、.NET、Ruby等。
管理界面(Management UI):提供了易用的用户界面,使得用户可以监控和管理消息Broker的许多方面。
跟踪机制(Tracing):如果消息异常,RabbitMQ提供了消息的跟踪机制,使用者可以找出发生了什么。
插件机制(Plugin System):提供了许多插件,来从多方面进行扩展,也可以编辑自己的插件。

RabbitMQ安装(docker)

查询RabbitMQ镜像

docker search rabbitmq

 
  1. [root@localhost ~]# docker search rabbitmq
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. rabbitmq RabbitMQ is an open source multi-protocol me… 4798 [OK]
  4. bitnami/rabbitmq Bitnami Docker Image for RabbitMQ 100 [OK]
  5. bitnami/rabbitmq-exporter 2
  6. circleci/rabbitmq This image is for internal use 0
  7. circleci/rabbitmq-delayed https://github.com/circleci/rabbitmq-delayed… 1

image-20230617101359800

拉取镜像

docker pull rabbitmq

 
  1. [root@localhost ~]# docker pull rabbitmq
  2. Using default tag: latest
  3. latest: Pulling from library/rabbitmq
  4. 7b1a6ab2e44d: Pull complete
  5. 37f453d83d8f: Pull complete
  6. e64e769bc4fd: Pull complete
  7. c288a913222f: Pull complete
  8. 12addf9c8bf9: Pull complete
  9. eaeb088e057d: Pull complete
  10. b63d48599313: Pull complete
  11. 05c99d3d2a57: Pull complete
  12. 43665bfbc3f9: Pull complete
  13. Digest: sha256:884146137011519524d506a12687127f3d2c7c37c2cc11206dc72c59bedea5e2
  14. Status: Downloaded newer image for rabbitmq:latest
  15. docker.io/library/rabbitmq:latest

创建运行rabbitmq容器

docker run -it —name=rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123 -p 15672:15672 -p 5672:5672 rabbitmq

 
  1. docker run -it \
  2. --name rabbitmq \
  3. -v /etc/localtime:/etc/localtime \
  4. -v /usr/local/software/mq/data:/var/lib/rabbitmq \
  5. -e RABBITMQ_DEFAULT_USER=admin \
  6. -e RABBITMQ_DEFAULT_PASS=123 \
  7. --network wn_docker_net \
  8. --ip 172.18.12.20 \
  9. -p 15672:15672 \
  10. -p 5672:5672 \
  11. -d rabbitmq

image-20230722104404686

 

查看运行日志

 
  1. [root@localhost ~]# docker logs rabbitmq
  2. 2023-06-17 02:35:10.091757+00:00 [info] <0.222.0> Feature flags: list of feature flags found:
  3. 2023-06-17 02:35:10.107600+00:00 [info] <0.222.0> Feature flags: [ ] implicit_default_bindings
  4. 2023-06-17 02:35:10.107642+00:00 [info] <0.222.0> Feature flags: [ ] maintenance_mode_status
  5. 2023-06-17 02:35:10.107661+00:00 [info] <0.222.0> Feature flags: [ ] quorum_queue
  6. 2023-06-17 02:35:10.107675+00:00 [info] <0.222.0> Feature flags: [ ] stream_queue
  7. 2023-06-17 02:35:10.107749+00:00 [info] <0.222.0> Feature flags: [ ] user_limits
  8. 2023-06-17 02:35:10.107764+00:00 [info] <0.222.0> Feature flags: [ ] virtual_host_metadata
  9. 2023-06-17 02:35:10.107778+00:00 [info] <0.222.0> Feature flags: feature flag states written to disk: yes
  10. :
  11. :
  12. ## ## RabbitMQ 3.9.11
  13. ## ##
  14. ########## Copyright (c) 2007-2021 VMware, Inc. or its affiliates.
  15. ###### ##
  16. ########## Licensed under the MPL 2.0. Website: https://rabbitmq.com
  17. Erlang: 24.2 [jit]
  18. TLS Library: OpenSSL - OpenSSL 1.1.1m 14 Dec 2021
  19. Doc guides: https://rabbitmq.com/documentation.html
  20. Support: https://rabbitmq.com/contact.html
  21. Tutorials: https://rabbitmq.com/getstarted.html
  22. Monitoring: https://rabbitmq.com/monitoring.html

启动管理插件

进入rabbitmq容器

 
  1. [root@localhost ~]# docker exec -it rabbitmq bash

启动插件

 
  1. root@6d2342d51b11:/# rabbitmq-plugins enable rabbitmq_management
  2. Enabling plugins on node rabbit@6d2342d51b11:
  3. rabbitmq_management
  4. The following plugins have been configured:
  5. rabbitmq_management
  6. rabbitmq_management_agent
  7. rabbitmq_prometheus
  8. rabbitmq_web_dispatch
  9. Applying plugin configuration to rabbit@6d2342d51b11...
  10. The following plugins have been enabled:
  11. rabbitmq_management
  12. started 1 plugins.

浏览器测试

在浏览器中输入 linux的ip地址:15672

image-20230617104552831

RabbitMQ hello

引入依赖

 
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-amqp</artifactId>
  4. </dependency>

配置

 
  1. spring:
  2. rabbitmq:
  3. host: 192.168.20.65
  4. username: admin
  5. password: 123
  6. port: 5672

生产者

发送数据

java对象

使用序列化

 
  1. rabbitTemplate.convertAndSend(
  2. "hello_queue",
  3. bookType
  4. );

image-20240119151600306

json

 
  1. @Configuration
  2. public class RabbitmqConfig {
  3. @Bean
  4. public MessageConverter messageConverter(){
  5. return new Jackson2JsonMessageConverter();
  6. }
  7. @Bean
  8. public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
  9. RabbitTemplate rabbitTemplate = new RabbitTemplate();
  10. rabbitTemplate.setConnectionFactory(connectionFactory);
  11. rabbitTemplate.setMessageConverter(messageConverter());
  12. return rabbitTemplate;
  13. }
  14. }

image-20240119152219328

 

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

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

相关文章

《21天精通IPv4 to IPv6》第5天:IPv4与IPv6共存策略——如何为不同的系统实现IPv4与IPv6共存问题?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

华为OD机试 - 分配土地( Python C C++ JavaGo JS PHP)

题目描述 从前有个村庄&#xff0c;村民们在各种田地上插上小旗子&#xff0c;每个旗子上都标识了一个数字。现在&#xff0c;村民们想要找出一个包含相同数字的最小矩形区域&#xff0c;并将这块土地分配给对村庄做出巨大贡献的村民。我们需要找出这个矩形区域的最大面积。 …

SPI NOR FLASH和SPI NAND FLASH

SPI NOR FLASH和SPI NAND FLASH是两种不同的存储设备&#xff0c;它们在硬件接口和软件应用上都有所不同。以下是关于这两种存储设备更详细的介绍&#xff1a; 1.SPI NOR FLASH SPI NOR FLASH是一种非易失性存储器&#xff0c;它通过串行接口进行数据传输&#xff0c;具有读写…

C#使用哈希表对XML文件进行查询

目录 一、使用的方法 1.Hashtable哈希表 2.Hashtable哈希表的Add方法 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;示例 3.XML文件的使用 二、实例 1.源码 2.生成效果 可以通过使用哈希表可以对XML文件进行查询。 一、使用的方法 1.Hashtable哈希表…

一文读懂:Docker从入门到进阶(超详细实践应用、零踩坑)

文章目录 快速入门简介安装配置镜像加速部署MySQL Docker基础常见命令案例-部署Nginx命令别名数据卷挂载本地目录挂载DockerFile语法自定义镜像容器网络互联 项目部署部署Java应用部署前端DockerCompose 快速入门 简介 Docker是一个快速构建、运行、管理应用的工具。 传统的…

【Linux】学习-基础IO拓展篇

Linux基础IO拓展篇—详解文件系统 理解文件系统 在Linux基础IO篇中&#xff0c;我们站在用户的视角对文件进行了理解&#xff0c;主要是针对被打开的文件&#xff0c;那么有没有没有被打开的文件呢&#xff1f;当然有&#xff01;今天我们换个视角&#xff0c;来站在系统的角…

考研数据结构笔记(7)

循环链表、静态链表、顺序表和链表的比较 循环链表循环单链表循环双链表 静态链表什么是静态链表如何定义一个静态链表&#xff1f;简述基本操作的实现 顺序表和链表的比较逻辑结构物理结构/存储结构数据的运算/基本运算创建销毁增加、删除查找 循环链表 循环单链表 循环双链表…

【Linux】学习-进程间通信

进程间通信 介绍 进程间通信的本质 进程间通信的前提&#xff0c;首先需要让不同的进程看到同一块“内存”此“内存”一定不属于任何进程&#xff0c;而应该强调共享二字 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;…

springcloud分布式架构网上商城源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

微信小程序的大学生心理测试+后台管理

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

Acwing---839. 模拟堆

模拟堆 1.题目2.基本思想3.代码实现 1.题目 维护一个集合&#xff0c;初始时集合为空&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 x&#xff1b;PM&#xff0c;输出当前集合中的最小值&#xff1b;DM&#xff0c;删除当前集合中的最小值&#xff08…

Python网络通信

目录 基本的网络知识 TCP/IP IP地址 端口 HTTP/HTTPS HTTP HTTPS 搭建自己的Web服务器 urllib.request模块 发送GET请求 发送POST请求 JSON数据 JSON文档的结构 JSON数据的解码 下载图片示例 返回所有备忘录信息 此文章讲解如何通过Python访问互联网上的资源&a…

工业互联网IoT物联网设备网络接入认证安全最佳实践

制造业数字化转型过程中&#xff0c;产线物联网&#xff08;IoT&#xff09;设备、工控机的引入极大提高了生产效率的同时&#xff0c;也埋下了不容忽视的安全隐患。尤其制造业已成为勒索软件攻击的重灾区&#xff0c;利用物联网设备漏洞进行恶意攻击的事件不胜枚举&#xff0c…

【小沐学GIS】基于Android绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

Vue3中Setup概述和使用(三)

一、引入Setup 1、Person.Vue 与Vue3编写简单的App组件(二) 中的区别是&#xff1a;取消data、methods等方法,而是将数据和方法定义全部放进setup中。 <template><div class"person"><h1>姓名:{{name}}</h1><h1>年龄:{{age}}</h…

天猫数据分析(天猫数据查询分析工具/软件):2023年天猫户外用品市场蓬勃发展,国产品牌具备竞争优势

后疫情时代&#xff0c;大众对于户外活动的热情高涨&#xff0c;参与度迅速提升&#xff0c;在这一消费热情下&#xff0c;我国的户外用品行业呈现出蓬勃的发展态势&#xff0c;市场规模不断扩大。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年度&#xff0c;…

HarmonyOS 状态管理装饰器 Observed与ObjectLink 处理嵌套对象/对象数组 结构双向绑定

本文 我们还是来说 两个 harmonyos 状态管理的装饰器 Observed与ObjectLink 他们是用于 嵌套对象 或者 以对象类型为数组元素 的数据结构 做双向同步的 之前 我们说过的 state和link 都无法捕捉到 这两种数据内部结构的变化 这里 我们模拟一个类数据结构 class Person{name:…

Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化

简介 Python 的 pandas 包用于数据操作和分析&#xff0c;旨在让您以直观的方式处理带标签或关联数据。 pandas 包提供了电子表格功能&#xff0c;但由于您正在使用 Python&#xff0c;因此它比传统的图形电子表格程序要快得多且更高效。 在本教程中&#xff0c;我们将介绍如…

Python运算符大全,值得收藏

一、 Python的算术运算 Python的算术运算符与C语言类似&#xff0c;略有不同。包括加()、减(-)、乘(*)、除(/)、取余(%)、按位或(|)、按位与(&)、按位求补(~)、左移位(<<)、右移位(>>)、单目求反(-)、幂运算(**)、整除运算(//)、增强运算、增强矩阵乘法()。 …

【开源】SpringBoot框架开发个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…