积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿

问题一:什么是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 深入了解的更多相关文章

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. RabbitMq应用二

    在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...

  3. 如何优雅的使用RabbitMQ

    RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...

  4. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

  5. RabbitMq应用一

    RabbitMq应用一 RabbitMQ的具体概念,百度百科一下,我这里说一下我的理解,如果有少或者不对的地方,欢迎纠正和补充. 一个项目架构,小的时候,一般都是传统的单一网站系统,或者项目,三层架构 ...

  6. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  7. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  8. windows下 安装 rabbitMQ 及操作常用命令

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  9. RabbitMQ + PHP (三)案例演示

    今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...

  10. RabbitMQ + PHP (二)AMQP拓展安装

    上篇说到了 RabbitMQ 的安装. 这次要在讲案例之前,需要安装PHP的AMQP扩展.不然可能会报以下两个错误. 1.Fatal error: Class 'AMQPConnection' not ...

随机推荐

  1. python列表(list)

    #str #类,字符串 #name = "raitorei" #创建一个对象 #list #类,列表 ##############list类中提供的方法(灰魔法)######### ...

  2. 第二阶段:4.商业需求文档MRD:1.PRD-产品功能列表

    这就是对功能清单的梳理已经优先级筛选

  3. Java核心技术·卷 II(原书第10版)分享下载

    Java核心技术·卷 II 内容介绍 Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与<Java编程思想>齐名,10余年 ...

  4. 0015 行高那些事:line-height

    目标 理解 能说出 行高 和 高度 三种关系 能简单理解为什么行高等于高度单行文字会垂直居中 应用 使用行高实现单行文字垂直居中 能会测量行高 3.1 行高测量 行高的测量方法: 3.2 单行文本垂直 ...

  5. windows下mysql免安装版配置(踩过的坑)简记

    下载 从官网(https://dev.mysql.com/downloads/mysql/)下载 这里的免安装版本的,相对来说干净,但是需要自己来配置很多东西. 配置 首先是注册windows的服务. ...

  6. 从0开发3D引擎(一):开篇

    介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.最小功能集合(MVP)" 的3D引擎. 本系列的素材来自我们的产品 ...

  7. Windows Live Writer 语法高亮

    1.WindowsLiveWriter.CNBlogs.CodeHighlighter.rar 这个插件生成的高亮代码与网页上的一模一样,插入后即可立即显示效果,不过貌似它必须联网才能实时显示效果,因 ...

  8. Q: 字符串的修改

    题目描述 怎么样,前面的题还可以吧~ 依旧是字符串处理,设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1. 删除一个字符: 2. 插入一个字 ...

  9. js中的事件委派

    在介绍JS中事件委派之前先来看看一个简单的需求:为每一个超链接绑定一个单击响应函数并在控制台打印一句话,内容是:” a 标签的单击响应函数“.下面是这个需求的代码: <!DOCTYPE html ...

  10. linux下安装cmake方法(1)---下载压缩包

    OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装cmake:还有其它一些软件都需要先安装cmake 1.在linux环境下打开网页浏览器,输入网址:http:/ ...