整合RabbitMQ实现消息异步发送

消息队列中间件
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削峰等问题。
中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,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.hqwc.cn/news/460333.html

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

相关文章

开源!免费!Hugging Face推出GPT商城

Hugging Face发布开源AI助手制造工具&#xff0c;与OpenAI的定制GPT形成竞争 Hugging Face今年1月31日推出一款开源AI代码库——Hugging Chat Assistants&#xff0c;允许用户轻松创建特定功能的定制AI聊天机器人。 不同于OpenAI的ChatGPT商城需要每月20美金成为会员才能使用…

牛客网SQL进阶127: 月总刷题数和日均刷题数

官网链接&#xff1a; 月总刷题数和日均刷题数_牛客题霸_牛客网现有一张题目练习记录表practice_record&#xff0c;示例内容如下&#xff1a;。题目来自【牛客题霸】https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746?tpId240 0 问题描述 基于练习记录表…

【Web】vulhub Fastjson反序列化漏洞复现学习笔记

目录 1.2.24 RCE CVE-2017-18349 复现流程 原理分析 1.2.47 RCE CNVD-2019-22238 复现流程 原理分析 漏洞探测 1.2.24 RCE CVE-2017-18349 复现流程 vulhub启动靶场 用marshalsec启动LDAP/RMI服务 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRef…

TCP相关知识点

TCP相关知识点 参考&#xff1a; 《计算机网络》 (建议收藏)TCP协议灵魂之问&#xff0c;巩固你的网路底层基础 关于 TCP 三次握手和四次挥手&#xff0c;满分回答在此 (值得看) TCP处于网络体系结构中的运输层。 运输层主要为应用进程提供端到端的逻辑通信&#xff0c;然后对…

蓝桥杯Web应用开发-CSS3 新特性【练习一:属性有效性验证】

练习一&#xff1a;属性有效性验证 页面上有一个邮箱输入框&#xff0c;当你的输入满足邮箱格式时&#xff0c;输入框的背景颜色为绿色&#xff1b;当你的输入不满足要求&#xff0c;背景颜色为红色。 新建一个 index2.html 文件&#xff0c;在其中写入以下内容。 <!DOCTYP…

C++ AVL树

1.概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。 因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年发明了一种解决上…

ueransim关于ue侧nas层相关代码解读

一.在文件UERANSIM\UERANSIM-3.2.6\src\ue\nas中enc.cpp中完成了NAS&#xff08;非接入层&#xff09;信令的加密和解密是通过NAS_ENC模块实现的。NAS_ENC模块负责将NAS信令消息进行加密&#xff0c;以确保其传输过程中的安全性。 具体来说&#xff0c;当UE发送NAS信令消息时&…

关于 Ant Design 的 Upload 组件使用 action 自动上传出现跨域问题的解决

问题描述 使用 Ant Design 的 Upload 组件时&#xff0c;可以通过 action 属性指定上传地址实现选择文件自动上传。但在我选择文件上传后浏览器控制台一直出现跨域错误。关键我已经在后端处理了跨域&#xff0c;还是一直会出现跨域错误。而且其它请求都可以正常处理跨域&#…

EF Core 模型优先——根据类对象创建数据表

需要的nuget包&#xff1a; Microsoft.EntityframeworkCore.SqlServer &#xff08;根据自己的数据库类型选择对应的nuget包&#xff09; Microsoft.EntityframeworkCore.Tools Microsoft.VisualStudio.Web.CodeGeneration.Design 说明&#xff1a; &#xff08;1&#xf…

Netty的序列化之MessagePack

目录 引入MessagePack依赖 实体类 服务端代码 客户端代码 执行结果 引入MessagePack依赖 <dependency><groupId>org.msgpack</groupId><artifactId>msgpack</artifactId><version>0.6.12</version></dependency> 实体类…

【开源】JAVA+Vue.js实现高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

notepad++成功安装后默认显示英文怎么设置中文界面?

前几天使用电脑华为管家清理电脑后&#xff0c;发现一直使用的notepad软件变回了英文界面&#xff0c;跟刚成功安装的时候一样&#xff0c;那么应该怎么设置为中文界面呢&#xff1f;具体操作如下&#xff1a; 1、打开notepad软件&#xff0c;点击菜单栏“Settings – Prefere…