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

问题一:什么是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. 洛谷$P3877\ [TJOI2010]$打扫房间 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 昂考虑把题目的约束条件详细化?就说每个格点能向四连通连边,问能否做到每个格点度数等于2? $umm$就先黑白染色建两排点呗,然后就$S$向左侧连流量为2的边 ...

  2. HBase学习笔记(四)—— 架构模型

    在逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列. 但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional m ...

  3. 分享在开发多终端使用比较多的Adb命令

    分享在开发多终端或者涉及PC-Android的传输使用比较多的Adb命令 查看连接的设备 adb devices 列出设备安装的软件包 adb shell pm list packages 使用这个方 ...

  4. 利用shell脚本实现每隔60秒磁盘内存数据监控脚本

    #!/bin/bash #Author:GaoHongYu #QQ: #Time:-- :: #Name:ncjk.sh #Version:V1. clear xtip=$(hostname -I) ...

  5. Python3-Selenium自动化测试框架(二)之selenium使用和元素定位

    Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...

  6. placeHolder和defaultValue的区别

    placeHolder和defaultValue的区别 (1)placeHolder用于提示用户,它不与后端进行交互. (2)defaultValue则是与后端交互时的默认值. 举例说明:在Selec ...

  7. ACWing 248. 窗内的星星|扫描线+懒惰标记

    传送门 题目描述 在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数). 求用宽为W.高为H的矩形窗户(W,H为正整数)能圈住的星星的亮度总和最大是多少.(矩形边界上的星 ...

  8. ACM北大暑期课培训第五天

    今天讲的扫描线,树状数组,并查集还有前缀树. 扫描线   扫描线的思路:使用一条垂直于X轴的直线,从左到右来扫描这个图形,明显,只有在碰到矩形的左边界或者右边界的时候,这个线段所扫描到的情况才会改变, ...

  9. Oracle索引大全

    文档结构如下: 前言: Oracle 官方文档对索引的描述真是弱透了,对索引的说明就是一坨……,support也没有很好的资料,下面还是用的官方上的内容经过自己的整理加上网上的资料. 索引类型: 索引 ...

  10. python 条件判断的三元表达式

    示例:求两数中最大者 在JavaScript中代码如下: x = 1; y = 2; console.log(x > y ? x : y) 在python中代码如下: # 条件为真时的返回结果 ...