黑马学SpringAMQP

news2025/1/13 15:55:23

目录:

(1)SpringAMQP的基本介绍

(2)SpringAMQP-入门案例的消息发送

(3) SpringAMQP-入门案例的消息接收

(4)SpringAMQP-WorkQueue模型

(5)SpringAMPQ-发布订阅模型介绍

(6)SpringAMQP-FanoutExchange

(7)SpringAMQP-DirectExchange

(8)SpringAMQP-TopicExchange

(9)SpringAMQP-消息转换器


(1)SpringAMQP的基本介绍

上面的官方提供的简单队列模型消息发送与接收的api,写起来非常的麻烦,而SpringAMQP可以大大简化消息发送和接收的api

 

(2)SpringAMQP-入门案例的消息发送

 

 

 

 这里我们使用单元测试来做的,将来肯定不是单元测试,是在微服务里做业务,有人支付成功了,我想发送一个消息,在支付之后的业务里加上,发送消息的代码就可以了。

首先配置文件进行配置:

编写测试类:发送消息 :是Springboot项目,单元 测试需要加两个注解:

 

对列中接收了一条消息: 

 进入这个对列,查看一下:

 

(3) SpringAMQP-入门案例的消息接收

第一步引依赖,在父工程已经做了,这里不用在引了

消费者去监听消息,Spring已经帮助我们跟MQ建立了连接,连接的事不用管了,唯一需要管的事是,我要去监听那个对列,监听到这个队列后干什么事

首先进行配置配置文件:

 创建类:

这个类是Spring中的Bean,接收消息是有Spring来处理的,所以启动主启动类,就可以了:

 可以看到消息接收成功了

 浏览器对类中的消息就没了:消息消费完就干掉了

 (4)SpringAMQP-WorkQueue模型

 这里有两个消费者,有一条消息,消费者一接收到,消费完就会删除,消费者二就不会拿到这个消息,如果有50条消息,不会每个人50条,而是他两各自处理一部分,合起来是50条

只有一个消费者不行吗?比如这个消费者每秒处理40条消息,发送者每秒发送50条,那么这个消费者消费不完,每秒会多出来10个消息没人处理,这个消息怎么办呢?只能堆积在队列当中,那么队列是有存储上限的,最终会堆积满的,有两个消费者的话会不会堆积消息

 

从测试类里面,定义第二个方法: 

 

 消费者让他们分被睡ji

 启动消息的发送者的代码:消息平均的分配给这两个消费者,消费者1拿的是偶数,消费者二拿的是奇数,它没有考虑消费者的消费能力,平均接收,这是MQ的一种机制决定的,消息的预取机制

 消息预取:是先把消息都拿过来,有多小消息拿多少,不管能不能消费 这样消息会先平均的分配到消费者

在消费者的配置文件中加这个配置:每次都取一条消息,取完再拿,这样就不会出现消息先预取过来的情况了

 重新启动消费者的启动类:

重新发送消息:消费者一消费了大量的消息,消费者二消费的比较慢,它只消费了几条消息

 

 这样就起到了能者多劳的效果了,消费者一消费能力块,所以消费的消息多

(5)SpringAMPQ-发布订阅模型介绍

简单模型、工作对列模型发送的消息,他们有一个共同的特点,就是它发送的消息只能被一个消费者消费,一旦消费完就会从对列中删除

它是无法满足课程开始时的需求,用户支付完,去通知其他服务:订单服务、存储服务、短信服务,这三个服务各自去完成自己的业务,也就是说你发送的这条消息,需要被三个消费者服务都接收到 ,那怎么办?就需要用到发布与订阅

 

以前的模型是直接发送给对列,而这里是发送给交换机,交换机再把消息转发到队列当中,消息的发送者不需要队列的存在,交换机可以把消息转发给多个队列,如果转发给多个对列,就实现了一个消息被多个消费者消费了,到底交换机发给一个对列还是多个队列,是由交换机的类型决定的,分为三种交换机,他们只负责消息的转发

(6)SpringAMQP-FanoutExchange

 

 

 交换机:

 进入这个交换机:看到了绑定关系

 队列:

 

 

添加: 

 

 

 

 启动消费者主启动类,运行发送者:

 

(7)SpringAMQP-DirectExchange

 

 

 

 

 消费者:

 

 

 

 

 

发送者: 

 

 发送签名blue,相同的签名key才能接收消息:

 

 换成签名key为yellow的,相同的key才能接收消息:

 

发送red的签名key,消费者都能接收到 

 

 

(8)SpringAMQP-TopicExchange

 

 

 

 

 运行

 

 

 

 

 

运行:

 

只有queue1收到消息: 

 

 

(9)SpringAMQP-消息转换器

 

 

 

 

 

 

 

 

 

 

 

 

 

 查看消息:发现数据不对,进行了序列话,我们rabbitMQ只支持字节,Spring允许我们发object的对象,说明啊,它会将我们的对象做序列化,用的是jdk的序列化方式,这个序列化有缺点:性能比较差、安全性有问题,数据长度长

 

 在父工程中引入依赖:

发送消息: 

 

在主启动类中声明Bean,他也是一个配置Bean

 

先清除消息:

 

重新发送消息:

 浏览器查看:

 

 接收消息:

引来已经在父工程引入过了,创建Bean:

 

 

 

 

 

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

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

相关文章

408数据结构考点总结

第一章 绪论 考点 1:时间复杂度与空间复杂度 时间复杂度 定义:将算法中基本运算的执行次数的数量级作为时间复杂度,记为O(n)O(n)O(n)。 计算原则 加法法则:T(n)T1(n)T2(n)O(f(n))O(g(n))O(max⁡(f(n),g(n)))T(n)T_{1}(n)T_{2…

安全—02day

XMLHttpRequest 对象 AJAX 通过原生的XMLHttpRequest对象发出 HTTP 请求,得到服务器返回的数据后,再进行处理。现在,服务器返回的都是 JSON 格式的数据, XMLHttpRequest本身是一个构造函数,可以使用new命令生成实例。…

T113_PRO-S3_GPS解析

今天主要是以市面上能买到的最新款的GPS作为解析的依据,市面上能买的GPS目前最新的串口打印的格式主要是如下: $GNGGA,085126.000,2311.77819,N,11323.44968,E,1,15,1.5,36.7,M,0.0,M,,*4C $GNGLL,2311.77819,N,11323.44968,E,085126.000,A,A*4B $GPGSA…

Java入门-0基础学Java-01Java环境变量配置

JDK的下载与安装jdk下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择与电脑系统匹配的版本进行下载(Windows系统如果是32位下载Windows x86,64位下载Windows x64,苹果的下载M…

Go语言设计与实现 -- 调度器总体概述

Go语言调度器使用与CPU数量相等的线程来减少线程频繁切换带来的内存开销,同时在每一个线程上执行额外开销更低的Goroutine来降低操作系统和硬件的负载。 每一次线程上下文切换都需要消耗约1us的时间,而Go调度器对Goroutine的上下文的切换约为0.2us&#…

01_FreeRTOS基础知识

目录 裸机与RTOS介绍 裸机与RTOS特点 FreeRtos简介 任务调度简介 抢占式调度 时间片调度 协程式调度 任务状态 裸机与RTOS介绍 假设小明在打游戏,此时女盆友微信回复了信息。 裸机:在裸机上实现是等这游戏打完之后,在去回复女朋友的信息,假设游戏刚刚开始打完需要半小…

使用缓存保护MySQL

1 更新缓存最佳实践 Redis的执行器非常薄,所以Redis只支持有限API,几乎没聚合查询能力,也不支持SQL。存储引擎也简单,直接在内存中用最简单数据结构保存数据。 如Redis的LIST在存储引擎的内存中的数据结构就是双向链表。内存是易…

基于ONNX人脸识别实例(SCRFD/ArcFace)-C#版

一、引用 Microsoft.ML.OnnxRuntime OpenCvSharp OpenCvSharp.Extensions二、人脸检测(Face Detection) using System; using System.Collections.Generic; using System.Linq; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp;…

c++11 标准模板(STL)(std::deque)(十)

定义于头文件 <deque> std::deque 修改器 移除首元素 std::deque<T,Allocator>::pop_front void pop_front(); 移除容器首元素。若容器中无元素&#xff0c;则行为未定义。 指向被擦除元素的迭代器和引用被非法化。若元素是容器中的最后元素&#xff0c;则尾后…

2022 数字IC设计秋招复盘——数十家公司笔试题、面试实录

0 引言 秋招结束了。 “今年是前五年最差的一年&#xff0c;也将是后五年最好的一年”&#xff0c;虽然无法预知后面的就业情况&#xff0c;但就我今年自己的亲身经历与去年师兄师姐找工作的情况对比&#xff0c;感觉难度确实是增大了很多。我总共投递了80家左右的公司&#…

德云社相声春晚未播先火,郭德纲独揽三个节目,四位老艺术家助阵

随着央视春晚的二次彩排&#xff0c;德云社相声春晚&#xff0c;也被安排到议事日程当中&#xff0c;听说今年的相声春晚还颇有看点。由于缺少了岳云鹏张云雷等得力干将&#xff0c;郭德纲老师决定亲自下场&#xff0c;一个人就独揽了三个节目。 按说德云社举办相声春晚&#x…

乒乓普及套及廉价底板评测

疫情的末端期间开始打乒乓球&#xff0c;最开始在单位打&#xff0c;后来去了花园和大爷们打。用了几个拍子和胶皮&#xff0c;都是网上最便宜的&#xff0c;现在在野球场能排到前十吧&#xff0c;我打球比较“正”&#xff08;他人评价&#xff09;&#xff0c;大家比较愿意和…

基于Java+SpringBoot+vue+element等动物救助平台设计和实现

基于JavaSpringBootvueelement等动物救助平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

数字人民币创新浪潮来袭,支付机构如何“乘风破浪”?

易观&#xff1a;近年来&#xff0c;数字经济浪潮迭起&#xff0c;数字科技方兴未艾。法定数字货币作为各国政府掌握货币发行控制权的重要载体&#xff0c;正在全球范围内全面铺开。法定数字货币的推出将大幅提升货币的流转效率&#xff0c;为央行管理职能赋予了数字化内涵。可…

Golang 常用字符串函数

统计字符串长度&#xff0c;按字节 len(str)str : "你好" fmt.Println("len", len(str))字符串遍历&#xff0c;同时处理有中文的问题 s : []rune(str)str : "你好" s : []rune(str) for i : 0; i < len(s); i {fmt.Printf("string%c\n&…

安全知识答题小程序v2.0与v3.0的异同点一览

安全知识答题小程序安全知识答题小程序这个软件架构是微信原生小程序云开发。主要包含六大功能模块页面&#xff0c;首页、答题页、结果页、活动规则页、答题记录页、排行榜页。v2.0的功能有以下&#xff1a;排行榜页答题记录页活动规则页微信授权登录获取微信头像和昵称等首页…

SQL SELECT TOP, LIMIT, ROWNUM 子句

SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; Oracle 可以使用…

java后端第五阶段:Git

一、开发场景 备份、代码还原、协同开发、追溯问题代码的编写人和编写时间&#xff01; 安装&#xff1a;直接去官网下载&#xff0c;傻瓜式安装 二、Git常用指令 1.设置用户签名 git config --global user.name 用户名 git config --global user.email 邮箱 2.初始化本地仓…

用存储过程、定时器、触发器来解决数据分析问题

做数据分析或者数据处理&#xff0c;我们也需要掌握这些技能&#xff0c;来解决特定的业务问题。比如&#xff1a;做自动化报表&#xff0c;如果数据需要每天实时更新&#xff08;增量爬虫&#xff09;、定时计算某个业务指标 、想要实时监控数据库表中的数据增、删、改情况等。…

四万字总结Redis语法、配置、实战

文章目录一、安装1.Linux下安装下载解压安装修改配置设置环境变量启动、连接查看redis进程退出2.windows下安装下载并解压二、系统管理1.常用key相关的命令2.时间相关命令3.设置相关命令CONFIG GET & CONFIG SET4.查询信息5.密码设置三、基本数据类型1.Redis strings2.Redi…