Java技术学习|消息队列|初级RabbitMQ

学习材料声明

黑马RabbitMQ快速入门教程,快速掌握rabbitmq、springAMQP消息中间件

是非常初级的学习,听说后续的高级课程会涉及到微服务之类的,所以等学完微服务再回来学。还有redis的高级部分也涉及了微服务,所以也都暂时停止学习了。

MQ是什么?

Message Queue。

为什么会出现这个,因为当请求很多,然后要完成这个请求,需要很多的可以细分的小服务组成,那么为了及时地响应请求,我们将串行执行的服务,分为一个服务(返回请求,发送消息给消息队列),消息队列(接受消息,发送消息给约定好的其他程序完成微服务!)

这样的改进,可以让请求快速得到响应,减少用户的等待时间,可以更好地拓展需求(增加约定好的程序),当部分程序宕机后,不影响其他部分。

这也是老师视频里面同步调用和异步调用的区别。

修改成:

常见的MQ技术

Rabbit ActiveMQ RocketMQ Kafka

在选型的时候,考虑到语言的可拓展,可靠,可用,延迟等等。

如何安装docker和rabbitMQ

我也不知道教程里面的命令要在哪里执行,就直接xshell连接虚拟机,复制粘贴,最后稀里糊涂安装好了。
安装教程1
安装教程2

这里还是遇到了一个问题:报错hmall不存在,是因为在docker network ls里面没有create过。所以这行命令直接删除。

外部还是访问不到,原因是防火墙没关

bash 复制代码
[root@user 公共]# docker run \
>  -e RABBITMQ_DEFAULT_USER=itheima \
>  -e RABBITMQ_DEFAULT_PASS=123321 \
>  -v mq-plugins:/plugins \
>  --name mq \
>  --hostname mq \
>  -p 15672:15672 \
>  -p 5672:5672 \
>  -d \
>  rabbitmq:3.8-management

systemctl stop firewalld.service

第二天又不知道怎么启动rabbitMQ了。

慢慢懂了(docker存储镜像,镜像创建容器,容器就是一个又一个可以运行起来的程序。)

先看一下镜像还在不在?docker images

看一下容器是不是在运行? docker ps

镜像有,容器无,且docker run又说已有容器,就删除所有停止的容器,再docker run。最后关闭防火墙。
如何获取镜像和删除镜像
如何从已有镜像中创建容器

bash 复制代码
使用 docker container prune 命令删除所有停止的容器

[root@user 公共]# docker run \
>  -e RABBITMQ_DEFAULT_USER=itheima \
>  -e RABBITMQ_DEFAULT_PASS=123321 \
>  -v mq-plugins:/plugins \
>  --name mq \
>  --hostname mq \
>  -p 15672:15672 \
>  -p 5672:5672 \
>  -d \
>  rabbitmq:3.8-management

systemctl stop firewalld.service

如何访问?

页面上:图上的ip地址是自己的虚拟机地址。

java程序要访问:走的是5672端口。

比较不理解的virtual host这个概念

用于区分什么的?

一般是不同项目需要区分不同的虚拟主机。这样就看不到其他项目的队列,交换机之类的了。

SpringAMQP协议

将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。

但是,RabbitMQ官方提供的Java客户端编码相对复杂,一般生产环境下我们更多会结合Spring来使用。而Spring的官方刚好基于RabbitMQ提供了这样一套消息收发的模板工具:SpringAMQP。并且还基于SpringBoot对其实现了自动装配,使用起来非常方便。

基础的模型

1.WorkQueues模型

2.交换机(可以复用消息给多个队列)

3.如何接受和发送的是Object类型

4.整个Java代码梳理

publisher:在配置文件中配置IP地址等等信息。发送消息。

consumer:同样需要配置信息,利用@RabbitListener来监听消息。会涉及交换机与队列的绑定代码。

相关推荐
代码山河9 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
释厄6239 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
小嘉丶学长13 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
小李不想当小白14 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
adinnet202617 小时前
电商客服对话知识库的自学习闭环与质量演进机制
学习
lazy H18 小时前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408
试剂界的爱马仕19 小时前
α-Cyano-4-hydroxycinnamic acid(CHCA)用作 MALDI-TOF 基质的配制与使用
大数据·人工智能·深度学习·学习
小向是个Der19 小时前
嵌入式进阶——编译与链接
汇编·单片机·学习·编译原理·交叉编译
学网安的肆伍20 小时前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
海绵宝宝转agent20 小时前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先