消息队列(Message Queue)

消息:应用间传送的数据。

队列:一种先进先出的数据结构。

消息队列:一种在应用程序之间传递消息的通信方式,允许程序之间异步的发送和接收消息。也就是说,发送消息方不用关系消费者是谁,消费者也不需要关心发送者是谁。

基本概念认识

  • 生产者:发送消息的程序
  • 消费者:接收消息的程序
  • 队列:存放消息的存储区域
  • 交换机:消息路由核心组件,当生产者发送消息后,消息会首先到交换机,交换机会根据我们的配置将其路由到对应的队列中

安装

docker安装

# 3.13 是版本号,可以用自己适合的
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management

这个比较简单,暂时不多写了

在基于 RPM 的 Linux 上安装

官方给了好几种安装方式,不过官方强烈推荐使用 Yum 存储库从 Cloudsmith.io 镜像安装软件包。这里就使用这种方式。参考文档:https://www.rabbitmq.com/docs/install-rpm#cloudsmith

  1. Yum 将验证其安装的任何软件包的签名,因此该过程的第一步是导入签名密钥。(服务器在国内的话,操作可能会比较慢)

    ## primary RabbitMQ signing key
    rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
    ## modern Erlang repository
    rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
    ## RabbitMQ server repository
    rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'
    
  2. /etc/yum.repos.d/ 目录下添加 .repo 文件(例如 rabbitmq.repo )。注意要与系统的发行版对应。我的系统是 el9 的,所以我们可以创建文件:/etc/yum.repos.d/rabbitmq.repo 并在其中添加如下内容:

    # In /etc/yum.repos.d/rabbitmq.repo
    
    ##
    ## Zero dependency Erlang RPM
    ##
    
    [modern-erlang]
    name=modern-erlang-el9
    # uses a Cloudsmith mirror @ yum.novemberain.com.
    # Unlike Cloudsmith, it does not have any traffic quotas
    baseurl=https://yum1.novemberain.com/erlang/el/9/$basearch
            https://yum2.novemberain.com/erlang/el/9/$basearch
            https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/9/$basearch
    repo_gpgcheck=1
    enabled=1
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [modern-erlang-noarch]
    name=modern-erlang-el9-noarch
    # uses a Cloudsmith mirror @ yum.novemberain.com.
    # Unlike Cloudsmith, it does not have any traffic quotas
    baseurl=https://yum1.novemberain.com/erlang/el/9/noarch
            https://yum2.novemberain.com/erlang/el/9/noarch
            https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/9/noarch
    repo_gpgcheck=1
    enabled=1
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
           https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [modern-erlang-source]
    name=modern-erlang-el9-source
    # uses a Cloudsmith mirror @ yum.novemberain.com.
    # Unlike Cloudsmith, it does not have any traffic quotas
    baseurl=https://yum1.novemberain.com/erlang/el/9/SRPMS
            https://yum2.novemberain.com/erlang/el/9/SRPMS
            https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/9/SRPMS
    repo_gpgcheck=1
    enabled=1
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
           https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    
    
    ##
    ## RabbitMQ Server
    ##
    
    [rabbitmq-el9]
    name=rabbitmq-el9
    baseurl=https://yum2.novemberain.com/rabbitmq/el/9/$basearch
            https://yum1.novemberain.com/rabbitmq/el/9/$basearch
            https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/9/$basearch
    repo_gpgcheck=1
    enabled=1
    # Cloudsmith's repository key and RabbitMQ package signing key
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
           https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [rabbitmq-el9-noarch]
    name=rabbitmq-el9-noarch
    baseurl=https://yum2.novemberain.com/rabbitmq/el/9/noarch
            https://yum1.novemberain.com/rabbitmq/el/9/noarch
            https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/9/noarch
    repo_gpgcheck=1
    enabled=1
    # Cloudsmith's repository key and RabbitMQ package signing key
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
           https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
    gpgcheck=1
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
    [rabbitmq-el9-source]
    name=rabbitmq-el9-source
    baseurl=https://yum2.novemberain.com/rabbitmq/el/9/SRPMS
            https://yum1.novemberain.com/rabbitmq/el/9/SRPMS
            https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/9/SRPMS
    repo_gpgcheck=1
    enabled=1
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
    gpgcheck=0
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    pkg_gpgcheck=1
    autorefresh=1
    type=rpm-md
    
  3. 使用 dnf (yum) 命令安装软件包

    # 更新包元数据
    dnf update -y
    # 从标准存储库安装依赖项
    dnf install socat logrotate -y
    # 安装 Erlang 和 RabbitMQ
    dnf install -y erlang rabbitmq-server
    

启动

# 启动
systemctl start rabbitmq-server
# 查看状态
systemctl status  rabbitmq-server
# 关闭
systemctl stop rabbitmq-server
# 重启
systemctl restart rabbitmq-server
# 开机启动守护进程(需要管理员身份)
systemctl enable rabbitmq-server

启动成功后,RabbitMQ 默认监听5672端口。

参考文章:
https://kucw.io/blog/2020/11/rabbitmq/
https://www.rabbitmq.com/tutorials