RabbitMq 深入了解
积少成多 ---- 仅以此致敬和我一样在慢慢前进的人儿
问题一:什么是RabbitMq
下面就是些个人的感受,
rabbitmq 就是一个遵循AMQP协议(这个是啥不清楚) 的消息队列的实现,用于服务器和服务器之间的连接,
producer可以发送消息到消息队列里面,customer 可以消费消息队列
两者之间的方式有很多, 如常见的点对点(1V1)(专业术语:direct), 点对多(1V多)(专业术语: fanmout)
转化为大白话: A发送一条消息,这个消息只有B能接受到,这就是点对点
A发送一条消息, 这个消息B,C,D都可以接收到, 这个就是点对多
那么问题来了: 为什么要使用rabbitMq (使用场景是什么)
异步处理、应用解耦、流量削峰等
https://www.cnblogs.com/zhao-yi/p/9299126.html
在springBoot 中如何使用呢?
我自己使用的docker 运行 rabbitmq的镜像来做的,所以使用rabbitmq服务器的具体安装不太清楚
在springBoot 中主要步骤如下:
1、 引入依赖
<!-- 引入rabbitmq 消息中间件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、 配置rabbitmq的连接(rabbit 本身就是一个服务器,它的连接方式就像jdbc连接数据一般)
# 配置rabbitmq的(可以自己查看rabbitProperties 去查看需要配置的项,以及默认的配置项)
sring:
rabbitmq:
host: 192.168.3.48
port: 5672
virtual-host: /
username: guest
password: guest
3、发布消息和接受消息案例
# 发布消息测试
@Test
public void test(){
//像极了之前的template 工具,就是对rabbitmq的操作集合在一起了
System.out.println("HELLO"); // 下面的send 里面需要 参数message 但是查询之后,这个message 有点麻烦是一个类,所以不建议使用这个
// rabbitTemplate.send("qf.direct","qf","记住你是直接连接的");
Map<String, Object> map = new HashMap<>();
map.put("first", "你好");
map.put("second", "大家好");
rabbitTemplate.convertAndSend("exchange.direct", "qf",map);
System.out.println("发送成功");
} # 消费消息测试
@Test
public void receive(){
// 指定获取某个消息队列里面的消息
Object qf = rabbitTemplate.receiveAndConvert("qf");
System.out.println(qf.getClass());
System.out.println(qf);
System.out.println("成功获取");
}
4、 使用@RabbitListener 注解(这部分的详细的使用逻辑以及原理一窍不通)
使用@RabbitListener注解需要开启rabbitmq注解
@EnableRabbit
@EnableCaching
@MapperScan("com.qf.springboot01.dao")
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
使用案列如下:
@RabbitListener(queues = "qf")
public void receive(Object person){
if(person == null){
System.out.println("person里面是空的");
}
System.out.println();
System.out.println("接受人" + person);
System.out.println(person.toString());
}
}
该注解 queues 参数用于指定监听的队列,可以监听多个队列
该注解标注的方法的参数,用于匹配队列里面的消息,如果里面是相同类型的数据则直接进行数据封装获取,如果不一样的
则不进行封装,但是也会消费一条消息。
白话就是:我取一条消息,参数跟我对应那就给你,如果不相同那就不给你了,但是消息我也取出来。
5、 注意事项:
在引入依赖的时候,其中RabbitAutoConfiguration 这个类 帮我们自动配置了很多东西,其中将消息的body存储到队列中的序列化的方式也配置了
但是默认的序列化是序列化为byte数组的方式存储到队列中,造成阅读障碍。
所以自己配置了他的MessageConverter ,如下:
@Configuration
public class MyAMQPConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
目前因为只是了解的比较浅,所以只能记录这些简单的东西,待后面深入了解之后,
望你回来添加,这些数据
RabbitMq 深入了解的更多相关文章
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- RabbitMq应用二
在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...
- 如何优雅的使用RabbitMQ
RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...
- RabbitMq应用一的补充(RabbitMQ的应用场景)
直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...
- RabbitMq应用一
RabbitMq应用一 RabbitMQ的具体概念,百度百科一下,我这里说一下我的理解,如果有少或者不对的地方,欢迎纠正和补充. 一个项目架构,小的时候,一般都是传统的单一网站系统,或者项目,三层架构 ...
- 缓存、队列(Memcached、redis、RabbitMQ)
本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...
- windows下 安装 rabbitMQ 及操作常用命令
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...
- RabbitMQ + PHP (三)案例演示
今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...
- RabbitMQ + PHP (二)AMQP拓展安装
上篇说到了 RabbitMQ 的安装. 这次要在讲案例之前,需要安装PHP的AMQP扩展.不然可能会报以下两个错误. 1.Fatal error: Class 'AMQPConnection' not ...
随机推荐
- 【软帝学院】女生不适合学习java?其实女生学java更有优势,更好就业!
女生适合学java吗?女生做IT怎么样 首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说,我觉得这是一种偏见. 不少人潜意识里认为女生不适合从事IT开发岗位的工作,因为他们 ...
- windows10 powershell上切换至cmd
前言 在windows10 上是遇到了坑,因为出现了这样的情况!不要说什么盗版,公司买的正版呢. 上图是powershell,下图是 cmd,然后我同样使用powershell 与 cmd,查询nod ...
- 如何查看linux是否打开虚拟化
[服务器虚拟化] 执行命令: cat /proc/cpuinfo |grep vmx 如果有输出,则说明CPU支持虚拟化技术. --------> svm - Secure virtua ...
- 20191017-5 alpha week 2/2 Scrum立会报告+燃尽图 04
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9801 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐 ...
- 「P5004」专心OI - 跳房子 解题报告
题面 把\(N\)个无色格子排成一行,选若干个格子染成黑色,要求每个黑色格子之间至少间隔\(M\)个格子,求方案数 思路: 矩阵加速 根据题面,这一题似乎可以用递推 设第\(i\)个格子的编号为\(i ...
- Java散点
1.在Java中,所有需要保存在常量池中的数据,长度最大不能超过65535,这当然也包括字符串的定义
- 低副瓣阵列天线综合1 matlab HFSS
车载雷达天线多采用微带贴片天线,贴片振子的形状多种多样,较常用的是矩形: 组阵时多采用先串馈再把串馈好的行或列单元采取并馈的方式组阵,无论是串馈或并馈,想要获得较低的副瓣效果,都需要采取电流幅度加权的 ...
- 【转】Java面试题:多继承
招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章“Java 面试题:写一个字符串的反转”所说: 面试开发人员不仅辛苦而且乏 ...
- XSS基础学习
XSS基础学习 By:Mirror王宇阳 什么是XSS XSS攻击是指在网页中嵌入一段恶意的客户端Js脚本代码片段,JS脚本恶意代码可以获取用户的Cookie.URL跳转.内容篡改.会话劫持--等. ...
- FastOne专业计算平台助力生命科学研发
11月16日,由AWS主办的云计算行业沙龙在中油阳光酒店举行,速石科技CEO陈熹就高性能计算如何助力生命科学领域发表了精彩的演讲. 面临的问题及挑战 在算力及高性能领域,随着行业客户的业务需求量,数据 ...