RabbitMQ笔记(基础篇)

视频: 

MQ基础-01.RabbitMQ课程介绍_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1mN4y1Z7t9?p=1&vd_source=d0ea58f1127eed138a4ba5421c577eb1

一、RabbitMQ简介

1.同步调用

优势:时效性强,等待结果后才返回

劣势:拓展性差,性能下降,级联失败问题

2.异步调用

异步调用就是基于消息通知的方式,一般含有三个角色

(1)消息发送者:投递消息的人,原来的调用方

(2)消息代理:管理、暂存、转发消息,可以理解微信服务器

(3)消息接受者:接收和处理消息的人,原来服务提供方

Broker是消息代理

二.RabbitMQ的安装

RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址:RabbitMQ: One broker to queue them all | RabbitMQicon-default.png?t=N7T8https://www.rabbitmq.com/

三.RabbitMQ入门

(1)登录RabbitMQ后添加队列

(2)交换机先绑定队列名字

(3)交换机发送消息给队列

 

队列可以查看接收到的消息

 四、数据隔离

将Virtual host切换为/

 

 (1)新建一个用户

(2)为用户创建virtual host

 

(3)测试不同virtual host直接数据隔离现象,通过修改virtual host即可

五、Java客户端

(1)入门示例

1.引入依赖

        <!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

2.配置RabbitMQ服务端信息(消费者和生产者都需要配置)

spring:rabbitmq:virtual-host: /hamllport: 5672host: 192.168.92.136username: hmallpassword: 123

3.消息发送方

package cn.itcast.mq.helloworld;import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testvoid testSendMessageQueue(){String queueName = "simple.queue";String msg = "Hello,amqp";rabbitTemplate.convertAndSend(queueName,msg);}}

4.消息接收方(不断接收消息)

package cn.itcast.mq.listeners;import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Slf4j
@Component
public class MqListener {@RabbitListener(queues = "simple.queue")public void listenSimpleQueue(String msg){System.out.println("消费者收到消息:"+msg);}
}

(2)消费者消息推送限制

 (3)Fanout交换机

1.创建hmall.fanout交换机,绑定fanout.queue1和fanout.queue2

2.消息发送方

    @Testvoid testSendFanout(){String exchangeName = "hmall.fanout";String msg = "Hello,everyone!";rabbitTemplate.convertAndSend(exchangeName,null,msg);}

3.消息接收方

    @RabbitListener(queues = "fanout.queue1")public void listenFanoutQueue(String msg) throws InterruptedException {System.out.println("消费者1收到消息:"+msg);}@RabbitListener(queues = "fanout.queue2")public void listenFanout2Queue(String msg) throws InterruptedException {System.err.println("消费者2收到消息:....."+msg);}

(4)Direct交换机

注意:Direct交换机绑定队列时配置Routing Key

如下图所示:

绑定queue1要配置blue和red的Routing Key,而绑定queue2要配置yellow和red的Routing Key

1.创建hmall.direct交换机,绑定direct.queue1和direct.queue2

2.消息发送方

    @Testvoid testSendDirect(){String exchangeName = "hmall.direct";String msg = "Hello,every Direct!";rabbitTemplate.convertAndSend(exchangeName,"blue",msg);}

3.消息接收方

    @RabbitListener(queues = "direct.queue1")public void listenDirectQueue(String msg) throws InterruptedException {System.out.println("消费者1收到消息:"+msg);}@RabbitListener(queues = "direct.queue2")public void listenDirect2Queue(String msg) throws InterruptedException {System.err.println("消费者2收到消息:....."+msg);}

 (5)Topic交换机

 

1.Topic交换机绑定队列

注意:Topic交换机绑定队列时配置Routing Key

2. 消息发送者

    @Testvoid testSendTopic(){String exchangeName = "hmall.topic";String msg = "Hello,every Topic!";rabbitTemplate.convertAndSend(exchangeName,"china.hello",msg);}

3.消息接收方

    @RabbitListener(queues = "topic.queue1")public void listenTopicQueue(String msg){System.out.println("消费者1收到消息:"+msg);}@RabbitListener(queues = "topic.queue2")public void listenTopicQueue2(String msg){System.err.println("消费者2收到消息:....."+msg);}

(6)声明队列和交换机方式一

两种创建交换机、队列、和绑定队列的方式

package cn.itcast.mq.config;import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FanoutConfig {@Beanpublic FanoutExchange fanoutExchange(){
//       ExchangeBuilder.fanoutExchange("hmall.fanout").build();return new FanoutExchange("hmall.fanout1");}@Beanpublic Queue fanoutQueue3(){
//        QueueBuilder.durable("fanout.queue1").build();return new Queue("fanout.queue3");}@Beanpublic Binding fanoutBinding3(Queue fanoutQueue3,FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue3).to(fanoutExchange);}@Beanpublic Queue fanoutQueue4(){return new Queue("fanout.queue4");}@Beanpublic Binding fanoutBinding4(){return BindingBuilder.bind(fanoutQueue4()).to(fanoutExchange());}
}

(7)声明队列和交换机方式二

 示例代码:

    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1",durable = "true"),exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),key = {"red","blue"}))public void listenDirectQueue(String msg) throws InterruptedException {System.out.println("消费者1收到消息:"+msg);}@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "direct.queue2",durable = "true"),exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),key = {"red","yellow"}))public void listenDirect2Queue(String msg) throws InterruptedException {System.err.println("消费者2收到消息:....."+msg);}

(8)消息转换器

 1.添加一个队列,名为object.queue

2.编写单元测试,向队列中发送一条消息,消息的类型为Map

    @Testvoid testSendObject(){Map<String, Object> msg = new HashMap<>(2);msg.put("name","Jack");msg.put("age",21);rabbitTemplate.convertAndSend("object.queue",msg);}

3.打开控制台,发现发送来的消息是一串乱码,解决方式如下:

3.1引入依赖:
<!--        Jackson--><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId></dependency>
 3.2配置MessageConverter
    @Beanpublic MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}

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

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

相关文章

虚拟化与Docker基本概念与Docker的安装

Docker Docker 是一个开源的应用容器引擎&#xff0c;它最初是用 Go 语言开发的。Docker 允许开发者将应用程序及其依赖、库和环境打包到一个可移植的容器中&#xff0c;这个容器可以在任何支持 Docker 的 Linux 或 Windows 机器上运行&#xff0c;保证了应用在不同环境之间的…

【行为型模式】备忘录模式

一、备忘录模式概述 备忘录模式定义&#xff1a;又称之为快照模式(Snapshop Pattern)或者令牌模式(Token Pattern)&#xff0c;是指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;这样我们就可以在需要的时候将该对…

【14-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

InstantMesh:利用稀疏视图大规模重建模型从单张图像高效生成3D网格

作者&#xff1a;Jiale Xu&#xff0c;Weihao Cheng&#xff0c;Yiming Gao等 编译&#xff1a;东岸因为一点人工一点智能 InstantMesh&#xff1a;利用稀疏视图大规模重建模型从单张图像高效生成3D网格在这项工作中&#xff0c;我们提出了InstantMesh&#xff0c;一个开源的…

【C语言】红黑树详解以及C语言模拟

一、红黑树的性质二、红黑树的旋转操作三、红黑树的插入操作四、红黑树的删除操作五、红黑树的应用六、C语言模拟红黑树七、总结 红黑树是一种自平衡二叉查找树&#xff0c;它能够保持树的平衡&#xff0c;从而确保查找、插入和删除的最坏情况时间复杂度为O( l o g n log_n log…

LoRA: 大模型的低秩适配

笔记整理&#xff1a;陈一林&#xff0c;东南大学硕士&#xff0c;研究方向为不确定知识图谱规则学习 链接&#xff1a;https://arxiv.org/abs/2106.09685 1、动机 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练&#xff0c;然后对特定任务或领域进行适应性…

JAVA10迭代更新

文章目录 1 概述2 语法层次的变化1_局部变量的类型推断 3 API层次的变化1_集合中新增copyOf创建只读集合2_Optional 新增了orElseThrow方法 4 其他1_垃圾回收器接口2_G1 并行 Full GC3_应用程序类数据共享(扩展 CDS 功能)4_实验性的基于 Java 的 JIT 编译器 1 概述 2018年3月21…

新能源汽车小米su7

小米su7汽车 function init() {const container document.querySelector( #container );camera new THREE.PerspectiveCamera( 20, window.innerWidth / window.innerHeight, 1, 50000 );camera.position.set( 0, 700, 7000 );scene new THREE.Scene();scene.background ne…

vue项目中基于fabric 插件实现涂鸦画布功能

vue项目中基于fabric 插件实现涂鸦画布功能 一、效果图二、安装依赖三、main.js引入四、主要代码 一、效果图 二、安装依赖 npm install fabric 三、main.js引入 import fabric from fabric Vue.use(fabric);四、主要代码 //封装成了一个组件 <template><el-dialogt…

FlashSpeech、ID-Animator、TalkingGaussian、FlowMap、CutDiffusion

本文首发于公众号&#xff1a;机器感知 FlashSpeech、ID-Animator、TalkingGaussian、FlowMap、CutDiffusion Gradient Guidance for Diffusion Models: An Optimization Perspective Diffusion models have demonstrated empirical successes in various applications and ca…

《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制婴儿性别比例饼图

在MATLAB 中可以使用 pie 函数来创建饼图。饼图是一种展示不同部分占总体的相对比例的图表。 本示例从“婴儿出生数据.csv”文件读取婴儿出生数据&#xff0c;然后计算男性和女性婴儿的数量&#xff0c;使用MATLAB绘制饼图。 配套图书链接&#xff1a;https://item.jd.com…

AI图书推荐:AI驱动的图书写作工作流—从想法构思到变现

《AI驱动的图书写作工作流—从想法到变现》&#xff08;AI-Driven Book Creation: From Concept to Cash&#xff09;是Martynas Zaloga倾力打造的一本实用指南&#xff0c;它巧妙地将写作艺术与人工智能前沿技术相结合。此书不仅揭示了AI在图书出版领域的无限潜力&#xff0c;…

应用层协议 -- HTTPS 协议

目录 一、了解 HTTPS 协议 1、升级版的 HTTP 协议 2、理解“加密” 二、对称加密 1、理解对称加密 2、对称加密存在的问题 三、非对称加密 1、理解非对称加密 2、中间人攻击 3、CA 证书和数字签名 四、总结 一、了解 HTTPS 协议 1、升级版的 HTTP 协议 HTTPS 也是…

fatal: unable to access ‘https://github.com/alibaba/flutter_boost.git/

Git error. Command: git fetch stdout: stderr: fatal: unable to access ‘https://github.com/alibaba/flutter_boost.git/’: Failed to connect to github.com port 443 after 75005 ms: Couldn’t connect to server exit code: 128 GitHub (国际型)代码 分发平台/托管平…

Mycat(一)入门概述

文章目录 概述作用原理 Mycat1.x 与 Mycat2 功能对比1.x 与 2.0 功能对比图 Mycat2 相关概念概念描述 配置文件1、服务&#xff08;server&#xff09;2、用户&#xff08;user&#xff09;3、数据源&#xff08;datasource&#xff09;4、集群&#xff08;cluster&#xff09;…

车企的数智化“内功”,大模型帮修炼

文&#xff5c;白 鸽 编&#xff5c;王一粟 时隔4年回归的北京车展&#xff0c;遇上了中国智能汽车的热潮。 开年价格战的持续洗礼&#xff0c;不仅让一众中国车企都慌得一批&#xff0c;也让全球巨头特斯拉也面临一季度销量大跌局面。 与此同时&#xff0c;智能汽车还在…

C++初识内存管理和模版

目录 前言 1.C/C内存分布 2. C的内存管理方式 2.1 new/delete操作内置类型 2. new和delete操作自定义类型 3. operator new和operator delete函数 4. new和delete的实现原理 4.1 内置类型 4.2 自定义类型 5. malloc/free和new/delete的区别 6. 初识模版 6.1 泛型编…

ERROR: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

今天本来想在A服务器上传文件给B服务器的结果发现明明给root用户设置了密码就是远程登陆不了&#xff0c;后来才发现在容器中很多服务都是没有的&#xff0c;所以刚安装后忘记了修改配置文件&#xff0c;导致远程登陆失败。 报错&#xff1a; 解决方法&#xff1a; 在/etc/ssh…

申请高德地图,报错INVALID_USER_SCODE处理

配置上key后 报错&#xff1a; 解决&#xff1a;将应用类型修改为出行&#xff0c;问题解决 扩展&#xff1a;应用申请 进入应用管理&#xff0c;创建新应用&#xff08;这里我选了导航&#xff0c;就报了上边的错误&#xff09; 新应用中添加 key&#xff0c;服务平台选择…

static和extern关键字详解

目录 创作不易&#xff0c;如对您有帮助&#xff0c;还望一键三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 回顾 1.作用域和声明周期 1.1作用域 1.2生命周期 2.static和extern 2.1extern 2.2static 2.2-1static修饰局部变量 2.2-2static修饰全局变量 创…