• 十二、消息服务(2)


    本章概要

    • AMQP
    • 安装 RabbitMQ

    12.2.1 AMQP 简介

    AMQP (Advanced Message Queuing Protocol,高级消息队列协议),是一个线路层的协议规范,而不是 API 规范(例如 JMS)。由于 AMQP 是一个线路层协议规范,因此它天然就是跨平台的,就像 SMTP、HTTP 等协议一样,只要开发者按照规范的格式发送数据,任何平台都可以通过 AMQP 进行消息交互。像目前流行的 StormMQ 、RabbitMQ 等都实现了 AMQP 。

    12.2.2 Spring Boot 整合 AMQP

    和 JMS 一样,使用 AMQP 也是使用 AMQP 的某个实现,此处以 RabbitMQ 为例介绍 AMQP 的使用。

    1. RabbitMQ 简介

    RabbitMQ 是一个实现了 AMQP 的开源消息中间件,使用高性能的 Erlang 编写。RabbitMQ 具有可靠性、支持多协议、高可用、支持消息集群以及多语言客户端等特点,在分布式系统中存储转发消息,具有不错的性能表现。

    2. RabbitMQ 安装

    由于 RabbitMQ 使用 Erlang 编写,因此需要先安装 Erlang 环境,在 CentOS 7 中安装 Erlang 21.0 的步骤如下(其它下载地址:otp_src_21.0.tar.gz):
    (1)下载解压安装包

    wget http://erlang.org/download/otp_src_21.0.tar.gz
    tar -zxvf /opt/package/otp_src_21.0.tar.gz -C /opt/soft/
    
    • 1
    • 2

    (2)编译

    ./otp_build autoconf
    ./configure
    
    • 1
    • 2

    报错了以下错误

    configure: error: No curses library functions found
    configure: error: /opt/soft/otp_src_21.0/erts/configure failed for erts
    
    • 1
    • 2

    解决方案(没报错不需要)

    yum -y install ncurses-devel
    ./otp_build autoconf
    ./configure
    
    • 1
    • 2
    • 3

    (3)安装校验

    make install
    erl
    
    • 1
    • 2

    看到以下内容表示 Erlang 安装成功

    [root@VM-12-5-centos otp_src_21.0]# erl
    Erlang/OTP 21 [erts-10.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]
    
    Eshell V10.0  (abort with ^G)
    1> 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Erlang 安装成功后,然后开始安装 RabbitMQ
    (1)下载安装文件

    wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7.el7.noarch.rpm
    
    • 1

    如果提示502,在此下载:erlang-21.0.9-1.el7,rabbitmq-server-3.7.7-1.el7,还是502,直接离线安装吧:rabbitmq-server-generic-unix-3.7.7.tar

    (2)解压

    tar -xvf /opt/package/rabbitmq-server-generic-unix-3.7.7.tar -C /opt/soft/
    
    • 1

    修改主机名:vim /etc/hosts,追加一行 127.0.0.1 VM-12-5-centos(VM-12-5-centos改为自己的主机名),因为RabbitMQ在启动的时候会ping自己的主机名,所以这里要进行映射,然后重启网络:service network restart

    (3)启动

    注意:启动的时候注意查看日志(tail -f /opt/soft/rabbitmq_server-3.7.7/var/log/rabbitmq/log/crash.log
    我这报错了,原因是端口被占用

    在这里插入图片描述

    查看端口占用信息:**lsof -i:5672,然后 kill 掉,kill -9 3918

    在这里插入图片描述

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmq-server start
    
    • 1

    在这里插入图片描述

    (3)查看状态

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmqctl status
    
    • 1
    Status of node rabbit@VM-12-5-centos ...
    [{pid,17978},
     {running_applications,
         [{rabbitmq_management,"RabbitMQ Management Console","3.7.7"},
          {rabbitmq_management_agent,"RabbitMQ Management Agent","3.7.7"},
          {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.7.7"},
          {rabbit,"RabbitMQ","3.7.7"},
          {amqp_client,"RabbitMQ AMQP Client","3.7.7"},
          {rabbit_common,
              "Modules shared by rabbitmq-server and rabbitmq-erlang-client",
              "3.7.7"},
          {recon,"Diagnostic tools for production use","2.3.2"},
          {cowboy,"Small, fast, modern HTTP server.","2.2.2"},
          {ranch_proxy_protocol,"Ranch Proxy Protocol Transport","1.5.0"},
          {ranch,"Socket acceptor pool for TCP protocols.","1.5.0"},
          {ssl,"Erlang/OTP SSL application","9.0"},
          {public_key,"Public key infrastructure","1.6"},
          {asn1,"The Erlang ASN1 compiler version 5.0.6","5.0.6"},
          {os_mon,"CPO  CXC 138 46","2.4.5"},
          {jsx,"a streaming, evented json parsing toolkit","2.8.2"},
          {mnesia,"MNESIA  CXC 138 12","4.15.4"},
          {xmerl,"XML parser","1.3.17"},
          {cowlib,"Support library for manipulating Web protocols.","2.1.0"},
          {crypto,"CRYPTO","4.3"},
          {inets,"INETS  CXC 138 49","7.0"},
          {lager,"Erlang logging framework","3.6.3"},
          {goldrush,"Erlang event stream processor","0.1.9"},
          {compiler,"ERTS  CXC 138 10","7.2"},
          {syntax_tools,"Syntax tools","2.1.5"},
          {syslog,"An RFC 3164 and RFC 5424 compliant logging framework.","3.4.2"},
          {sasl,"SASL  CXC 138 11","3.2"},
          {stdlib,"ERTS  CXC 138 10","3.5"},
          {kernel,"ERTS  CXC 138 10","6.0"}]},
     {os,{unix,linux}},
     {erlang_version,
         "Erlang/OTP 21 [erts-10.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:64] [hipe]\n"},
     {memory,
         [{connection_readers,0},
          {connection_writers,0},
          {connection_channels,0},
          {connection_other,2820},
          {queue_procs,0},
          {queue_slave_procs,0},
          {plugins,799300},
          {other_proc,29727876},
          {metrics,195020},
          {mgmt_db,153256},
          {mnesia,73104},
          {other_ets,2823312},
          {binary,88784},
          {msg_index,31152},
          {code,23237767},
          {atom,1131721},
          {other_system,10672784},
          {allocated_unused,8706880},
          {reserved_unallocated,0},
          {strategy,rss},
          {total,[{erlang,68936896},{rss,73388032},{allocated,77643776}]}]},
     {alarms,[]},
     {listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},
     {vm_memory_calculation_strategy,rss},
     {vm_memory_high_watermark,0.4},
     {vm_memory_limit,770865561},
     {disk_free_limit,50000000},
     {disk_free,38876147712},
     {file_descriptors,
         [{total_limit,99901},
          {total_used,2},
          {sockets_limit,89908},
          {sockets_used,0}]},
     {processes,[{limit,1048576},{used,376}]},
     {run_queue,1},
     {uptime,118},
     {kernel,{net_ticktime,60}}]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    (4)开启web插件

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmq-plugins enable rabbitmq_management
    
    • 1

    在这里插入图片描述

    (5)重启

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmq-server restart
    
    • 1

    在这里插入图片描述

    (6)添加一个用户名为 long,密码为 123 的用户

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmqctl add_user long 123
    
    • 1

    在这里插入图片描述

    (7)设置 long 用户的角色为管理员

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmqctl set_user_tags long administrator
    
    • 1

    在这里插入图片描述

    (8)配置 long 的权限

    /opt/soft/rabbitmq_server-3.7.7/sbin/rabbitmqctl  set_permissions -p / long '.*' '.*' '.*'
    
    • 1

    在这里插入图片描述

    (9)登录
    浏览器访问:http://ip:15672
    在这里插入图片描述

    登录 long 用户
    在这里插入图片描述

  • 相关阅读:
    Android 小组件 AppWidgetProvider
    外贸常用工具-领英精灵的批量加好友功能详细解析
    猿创征文|HCIE-Security Day54:anti-ddos设备防御原理
    route和router的区别
    zk session expire会引起HA模式的rm一直处于standby吗
    图论 2023.11.20
    全国第一届学生(青年)运动会女子拳击比赛60公斤冠军载誉归来
    垂直领域对话系统架构
    力扣刷题记录167.1-----1356. 根据数字二进制下 1 的数目排序
    树结构的模糊查询
  • 原文地址:https://blog.csdn.net/GXL_1012/article/details/126361661