RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

本文围绕RabbitMQ展开,介绍了MQ基本概念、功能及分类,详细说明了RabbitMQ在CentOS下的下载安装步骤。还阐述了如何创建Java开发环境,以及工作队列、消息应答、持久化与分发、发布确认、交换机和死信等相关知识和操作。

一、MQ基本介绍

MQ(message queue):本质上是个队列,遵循FIFO原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递消息。MQ提供“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后消息发送上游只需要依赖MQ,不需要依赖其它服务。

功能1:流量消峰

功能2:应用解耦

功能3:异步处理

MQ的分类:

1.Kafka

2.RabbitMQ

RabbitMQ概念:

四大核心概念:

交换机:

队列: 

 六大核心模式:

1.简单模式。2.工作模式。3.发布订阅模式。4.路由模式。5.主题模式。6.发布确认模式。

RabbitMQ工作原理:

Channer:信道,发消息的通道。

二、MQ下载安装

下载:

1. 官网地址:https://www.rabbitmq.com/download.html。参考的下载地址如下:Linux下安装RabbitMQ_rabbitmq下载_零碎de記憶的博客-优快云博客

2.安装Erlang环境

yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz tcp_wrappers

3.下载Erlang,方式1:找到下面网址,在网址中下载rpm文件:

el/7/erlang-22.3.4.12-1.el7.x86_64.rpm - rabbitmq/erlang · packagecloud

或者直接输入下面指令下载rpm文件: 

wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-22.3.4.12-1.el7.x86_64.rpm/download.rpm

然后输入下面的命令安装已下载的安装包:

yum localinstall erlang-22.3.4.12-1.el7.x86_64.rpm

4.下载RabbitMQ,输入下面的下载

wget --content-disposition https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.8.13-1.el7.noarch.rpm/download.rpm

 输入下面的命令进行本地安装:

yum localinstall rabbitmq-server-3.8.13-1.el7.noarch.rpm

5. 下载socat,检查是否已下载:

yum install socat -y

注意以下的操作都要在 /usr/local/software目录下查看: 

6.添加开机启动RabbitMQ服务:chkconfig rabbitmq-server on。启动rabbitmq /sbin/service rabbitmq-server start。

7.查看服务状态 /sbin/service rabbitmq-server status

8.停止服务 /sbin/service rabbitmq-server stop。重新查看服务状态。

10.开启web管理界面 sudo rabbitmq-plugins enable rabbitmq_management

11.查看防火墙状态:systemctl status firewalld。关闭防火墙:systemctl stop firewalld。关闭rabbit服务器输入:sudo rabbitmqctl stop。开启rabbit服务器输入:sudo rabbitmq-server -detached。

12.在浏览器中输入地址:Linux服务器ip地址:15672,可访问web管理界面。

13.用户名guest,密码默认,但无法登陆,无权限。

14.rabbitmqctl list_users查看用户。创建账号 rabbitmqctl add_user admin 123。设置用户角色为管理员 rabbitmqctl set_user_tags admin administrator。设置用户权限 rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"。

15.再经尝试可以重新登录:

三、创建Java开发环境

1.创建1个新项目,命名atguigu-rabbitmq,然后创建模块Module。GroupId可以填写:com.atguigu.rabbitmq,ArtifactId可以填rabbitmq-hello,选择quickstart:

导入依赖如下:

  <dependencies>
    <!--rabbitmq依赖客户端-->
    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>5.8.0</version>
    </dependency>
    <!--操作文件流的依赖-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
      <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version> <!-- 根据你的需求指定版本号 -->
      </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

在下图中,P是生产者,C是消费者。中间的框是一个队列-RabbitMQ代表使用者保留的消息缓存区。

生产者代码

public class producer {
    //队列名称
    public static final String QUEUE_NAME = "hello";
    //发消息
    public static void main( String[] args ) throws IOException, TimeoutException {
        //第1步:创建一个连接工程
        ConnectionFactory factory = new ConnectionFactory();
        //第2步:输入工厂IP,用户名和密码——连接RabbitMQd队列
        factory.setHost("192.168.182.136");
        factory.setUsername("admin");
        factory.setPassword("123");
        //第3步:创建连接
        Connection connection = factory.newConnection();
        //第4步:获取信道
        Channel channel = connection.createChannel();
        //第5步:生成一个队列(队列名称,是否持久化,是否排他,自动删除,队列参数)
        //持久化:是否存储入磁盘,默认是将消息存储在内存中
        //排他:队列是否只供一个消费者消费,是否进行消息共享,true可以供多个消费者消费
        //自动删除:最后一个消费者断开连接后,该队列是否自动删除
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        //第6步:发消息,(交换机,路由key本次是队列名,参数,发送的消息)
        String message = "hello world";
        channel.basicPublish("",QUEUE_NAME,null,message.getByt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值