• CICD 流程学习(四)搜素服务与消息队列


    一  搜索服务

    Lucene概念

    Lucene是一种高性能、可伸缩的信息搜索 (IR)库,在2000年开源,最初由鼎鼎大名的Doug Cutting开发。是基于Java实现的高性能的开源项目

    Lucene采用了基于倒排表的设计原理,可以非常高效地实现文本查找,在底层采用了分段的存储模式,使它在读写时几乎完全避免了锁的出现,大大提升了读写性能

    2  Lucene读写工作流程

    • analysis模块:主要负责词法分析及语言处理,即分词
    • index模块:主要负责索引的创建工作
    • store模块:主要负责索引的读写
    • queryParser:主要负责语法分析
    • search模块:主要负责对索引的搜索工作
    • similarity模块:主要负责相关性打分和排序的实现

    二  Elasticsearch

    1  Elasticsearch 概述

    Elasticsearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful WEB接口

    Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎

    Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠快速

    2  Elasticsearch 作用

    企业搜索:提升任何用例的搜索和发现体验

    日志监测:快照且可扩展的日志管理

    基础架构监测:对系统质保进行监测和可视化

    Maps:实时探索位置数据

    SIEM:交互式调查和自动威胁检测

     APM:深入洞察应用程序的性能

    合成监测:监测可用性问题并进行应对

    终端安全:预防、检测、捕获并应对威胁

    3  Elasticsearch 特性

    Elasticsearch是流行的企业搜索引擎之一

    Elasticsearch是在Java上开发的,这使得它在几乎所有平台上都兼容

    Elasticsearch是实时的,添加的文档秒级就可以在这个引擎中搜索了

    Elasticsearch最多可扩展至PB级的结构化和非结构化数据

    Elasticsearch可以代替MongoDB等文档存储,是面向文档的数据库

    Elasticsearch使用非规范化来提高搜索性能

    Elasticsearch是分布式的可以轻松地在任何大型组织中进行扩展和集成

    Elasticsearch源代码开放,可在Apache许可版本2.0下使用

    4  Elasticsearch 部署

    1. #OpenJDK环境部署
    2. [root@Services ~]# yum clean all; yum repolist -v
    3. ...
    4. Total packages: 8,265
    5. [root@Services ~]# yum -y install java-1.8.0-openjdk-devel.x86_64 #安装OpenJDk
    6. ...
    7. Complete!
    8. [root@Services ~]#
    9. [root@Services ~]# ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.x86_64/ /usr/lib/jvm/jdk #创建JDK软链接
    10. [root@Services ~]# vim /etc/bashrc #配置环境变量
    11. [root@Services ~]# tail -3 /etc/bashrc
    12. export JAVA_HOME="/usr/lib/jvm/jdk/" #声明JAVA_HOME变量
    13. export CLASSPATH=. #声明类库加载目录
    14. export PATH=${JAVA_HOME}/bin/:$PATH #声明PATH变量
    15. [root@Services ~]# source /etc/bashrc #刷新bash环境
    16. [root@Services ~]# echo ${JAVA_HOME} #测试JAVA_HOME变量
    17. /usr/lib/jvm/jdk/
    18. [root@Services ~]# which java
    19. /usr/lib/jvm/jdk/bin/java
    20. [root@Services ~]# java -version
    21. openjdk version "1.8.0_332"
    22. OpenJDK Runtime Environment (build 1.8.0_332-b09)
    23. OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
    24. [root@Services ~]#
    25. #安装Elasticsearch服务
    26. [root@Services ~]# ls elasticsearch-6.8.0.rpm
    27. elasticsearch-6.8.0.rpm
    28. [root@Services ~]# yum -y localinstall ./elasticsearch-6.8.0.rpm
    29. #配置Elasticsearch服务
    30. [root@Services ~]# vim /etc/elasticsearch/elasticsearch.yml
    31. [root@Services ~]# cat /etc/elasticsearch/elasticsearch.yml | grep -Pv "^\s*(#|$)"
    32. node.name: Services #ES节点名称
    33. path.data: /var/lib/elasticsearch #ES数据存储路径
    34. path.logs: /var/log/elasticsearch #ES日志存储路径
    35. network.host: 0.0.0.0 #监听地址
    36. http.port: 9200 #HTTP端口
    37. [root@Services ~]#
    38. #启动Elasticsearch服务
    39. [root@Services ~]# systemctl enable elasticsearch.service #设置服务开机自启动
    40. [root@Services ~]# systemctl start elasticsearch.service #启动Elasticsearch服务
    41. [root@Services ~]# ss -antpul | grep java
    42. tcp LISTEN 0 128 *:9200 *:* users:(("java",pid=9847,fd=209))
    43. tcp LISTEN 0 128 *:9300 *:* users:(("java",pid=9847,fd=196))
    44. [root@Services ~]#
    45. #测试Elasticsearch服务
    46. [root@Services ~]# curl http://localhost:9200/ #访问9200端口,返回一段json数据
    47. {
    48. "name" : "Services",
    49. "cluster_name" : "elasticsearch",
    50. "cluster_uuid" : "1cf7N861QBC_C0RE8gm0OA",
    51. "version" : {
    52. "number" : "6.8.0",
    53. "build_flavor" : "default",
    54. "build_type" : "rpm",
    55. "build_hash" : "65b6179",
    56. "build_date" : "2019-05-15T20:06:13.172855Z",
    57. "build_snapshot" : false,
    58. "lucene_version" : "7.7.0",
    59. "minimum_wire_compatibility_version" : "5.6.0",
    60. "minimum_index_compatibility_version" : "5.0.0"
    61. },
    62. "tagline" : "You Know, for Search"
    63. }
    64. [root@Services ~]#

    5  Elasticsearch 插件

    Elasticsearch插件IK分词器

    单字分词:华、为、充、电、器

    二分法分词:华为、充电、器

    词库分词 (多数用于中文):华为、充电器 

    Elasticsearch插件安装方式
    1. #插件安装方法
    2. #方式一:从官网下载ES插件,通常为ZIP格式,解压到/usr/share/elasticsearch/plugins/目录
    3. #方式二:使用elasticsearch-plugin命令
    4. #elasticsearch-plugin install file://path/xx.zip
    5. #elasticsearch-plugin install http://addresss/xx
    6. #elasticsearch-plugin install ftp://address/xx
    7. #方式三:容器
    IK分词器插件
    1. #本地安装IK分词器插件
    2. [root@Services ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin list #查看插件列表
    3. [root@Services ~]# ls elasticsearch-analysis-ik-6.8.0.zip
    4. elasticsearch-analysis-ik-6.8.0.zip
    5. [root@Services ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-6.8.0.zip #安装插件
    6. -> Downloading file:///root/elasticsearch-analysis-ik-6.8.0.zip
    7. [=================================================] 100%
    8. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    9. @ WARNING: plugin requires additional permissions @
    10. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    11. * java.net.SocketPermission * connect,resolve
    12. See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
    13. for descriptions of what these permissions allow and the associated risks.
    14. Continue with installation? [y/N]y
    15. -> Installed analysis-ik
    16. [root@Services ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin list #查看插件列表
    17. analysis-ik
    18. [root@Services ~]#
    19. #测试IK分词器
    20. [root@Services ~]# systemctl restart elasticsearch.service #重启服务加载插件
    21. [root@Services ~]# curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_analyze?pretty -d '
    22. {
    23. "analyzer": "standard",
    24. "text": "华为手机"
    25. }' #测试标准分词
    26. {
    27. "tokens" : [
    28. {
    29. "token" : "华",
    30. "start_offset" : 0,
    31. "end_offset" : 1,
    32. "type" : "",
    33. "position" : 0
    34. },
    35. {
    36. "token" : "为",
    37. "start_offset" : 1,
    38. "end_offset" : 2,
    39. "type" : "",
    40. "position" : 1
    41. },
    42. {
    43. "token" : "手",
    44. "start_offset" : 2,
    45. "end_offset" : 3,
    46. "type" : "",
    47. "position" : 2
    48. },
    49. {
    50. "token" : "机",
    51. "start_offset" : 3,
    52. "end_offset" : 4,
    53. "type" : "",
    54. "position" : 3
    55. }
    56. ]
    57. }
    58. [root@Services ~]#
    59. [root@Services ~]# curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_analyze?pretty -d '
    60. {
    61. "analyzer": "ik_smart",
    62. "text": "华为手机"
    63. }' #测试IK分词器
    64. {
    65. "tokens" : [
    66. {
    67. "token" : "华为",
    68. "start_offset" : 0,
    69. "end_offset" : 2,
    70. "type" : "CN_WORD",
    71. "position" : 0
    72. },
    73. {
    74. "token" : "手机",
    75. "start_offset" : 2,
    76. "end_offset" : 4,
    77. "type" : "CN_WORD",
    78. "position" : 1
    79. }
    80. ]
    81. }
    82. [root@Services ~]#
    HEAD插件(容器部署)
    1. #安装podman工具
    2. [root@Services ~]# yum clean all; yum repolist -v
    3. ...
    4. Total packages: 8,265
    5. [root@Services ~]# yum -y install podman #安装podman
    6. Complete!
    7. [root@Services ~]# podman --version #确认podman安装
    8. podman version 4.0.2
    9. [root@Services ~]#
    10. #导入ES-HEAD镜像
    11. [root@Services ~]# ls elasticsearch-head.tar
    12. elasticsearch-head.tar
    13. [root@Services ~]# podman images #查看本地已有镜像
    14. REPOSITORY TAG IMAGE ID CREATED SIZE
    15. [root@Services ~]# podman load -i elasticsearch-head.tar #导入ES-HEAD插件镜像
    16. Getting image source signatures
    17. Copying blob 604c78617f34 done
    18. Copying blob 60a0858edcd5 done
    19. Copying blob b6ca02dfe5e6 done
    20. Copying blob 0a5e2b2ddeaa done
    21. Copying blob 53c779688d06 done
    22. Copying blob fa18e5ffd316 done
    23. Copying blob cf2eea3d6e04 done
    24. Copying blob d556e03b8284 done
    25. Copying blob 95ea76455b84 done
    26. Copying blob ce5705289a91 done
    27. Copying blob d09533ddfc0d done
    28. Copying blob eb415bbb4658 done
    29. Copying blob f418a5a1e636 done
    30. Copying config d008a8ccd0 done
    31. Writing manifest to image destination
    32. Storing signatures
    33. Loaded image(s): localhost/elasticsearch-head:latest
    34. [root@Services ~]# podman images #确认ES-HEAD镜像已导入
    35. REPOSITORY TAG IMAGE ID CREATED SIZE
    36. localhost/elasticsearch-head latest d008a8ccd029 7 weeks ago 862 MB
    37. [root@Services ~]#
    38. #启动ES-HEAD容器
    39. [root@Services ~]# podman ps #查看有运行的容器,应为空
    40. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    41. [root@Services ~]# podman run -d --name es-head --hostname es-head -p 9100:9100 localhost/elasticsearch-head:latest #后台运行ES-HEAD容器
    42. f222cb764271574148d31b184bd0aebda419ce3ebd43843c0ff8f1f4dc6ba53c
    43. [root@Services ~]# podman ps #确认ES-HEAD容器已运行
    44. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    45. f222cb764271 localhost/elasticsearch-head:latest /bin/sh -c grunt ... 2 seconds ago Up 2 seconds ago 0.0.0.0:9100->9100/tcp es-head
    46. [root@Services ~]# ss -antpul | grep 9100 #确认9100端口被监听
    47. tcp LISTEN 0 128 0.0.0.0:9100 0.0.0.0:* users:(("conmon",pid=12651,fd=5))
    48. [root@Services ~]#
    49. #修改Elasticsearch配置,开启跨域访问
    50. [root@Services ~]# vim /etc/elasticsearch/elasticsearch.yml
    51. [root@Services ~]# sed -rn '59,61p' /etc/elasticsearch/elasticsearch.yml
    52. http.port: 9200
    53. http.cors.enabled: true #开启HTTP跨域访问支持
    54. http.cors.allow-origin: "*" #允许跨域的访问范围
    55. [root@Services ~]# systemctl restart elasticsearch.service
    56. [root@Services ~]# ss -antpul | grep java
    57. tcp LISTEN 0 128 *:9200 *:* users:(("java",pid=12764,fd=214))
    58. tcp LISTEN 0 128 *:9300 *:* users:(("java",pid=12764,fd=201))
    59. [root@Services ~]#
    60. #测试访问Elasticsearch-HEAD插件:http://192.168.88.50:9100/

     6  Elasticsearch概念解析

    Node:一个装有Elasticsearch服务的节点

    Cluster:多个装有Elasticsearch服务节点组成的集群

    Index:拥有相似特征的文档集合

    Type: 索引中定义的一个或多个类型

    Document:一行具体的数据

    Trem:Elasticsearch中最小的搜索和存储单元

    Shards:索引的分片Replicas:索引的备份

    ES比对RDBMS

    Elasticsearch常用API

    • HTTP1.0方法
    1. GET:获取资源
    2. POST:传输实体文本
    3. HEAD:类似于GET,用于获取响应报头
    • HTTP1.1方法
    1. 0PTIONS:查询支持,可以查看服务器性能
    2. PUT:传输文件
    3. DELETE:删除资源
    4. TRACE:追踪路径
    5. CONNECT:用隧道协议连接代理
    • Curl调用Elasticsearch API语法

    curl  -H  指定HTTP请求头信息  -X  HTTP方法  ES服务器地址  -d  指定要传输的数据(JSON)

    1. #测试指定API
    2. [root@Services ~]# curl -H "Content-Type: application/json" -XGET http://localhost:9200/_cat/health
    3. 1677142976 09:02:56 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
    4. [root@Services ~]# curl -H "Content-Type: application/json" -XGET http://localhost:9200/_cat/health?v
    5. epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    6. 1677142979 09:02:59 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
    7. [root@Services ~]#
    8. #创建索引(必做练习)
    9. [root@Services ~]# curl -H "Content-Type: application/json" -XPUT http://localhost:9200/tedu/ -d '
    10. { "settings": {
    11. "index": {
    12. "number_of_shards": 1,
    13. "number_of_replicas": 0
    14. }
    15. }
    16. }'
    17. {"acknowledged":true,"shards_acknowledged":true,"index":"tedu"}[root@Services ~]#

     

    1. #调用API批量导入数据
    2. [root@Services ~]# ls data.sh logs.jsonl accounts.json
    3. accounts.json data.sh logs.jsonl
    4. [root@Services ~]# cat data.sh
    5. #!/bin/bash
    6. curl -H "Content-Type: application/json" -XPUT http://localhost:9200/account/user/_bulk --data-binary @accounts.json
    7. curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_bulk --data-binary @logs.jsonl
    8. [root@Services ~]# bash data.sh

     

    三  消息队列

    1  消息队列概述

    消息

    消息指的是两个应用之间传递的数据

    数据的形式有很多,可能是文本字符串,也可能是嵌入对象

    队列

    队列是一个数据结构,具有先进先出的特点

    是存储消息的介质

    消息队列: MQ(Message Queue)

    是指利用高效可靠的消息传递机制进行与平台无关的数据交流

    基于数据通信来进行分布式系统的集成,是在消息的传输过程中保存消息的容器

    消息队列本质上是一个队列,而队列中存放的是一个个消息

    2  消息队列工作流程

    3   消息队列实现方式

    AMQP:Advanced Message Queuing Protoco

    JMS:Java Message Service应用程序接口

    4   消息队列特点

    优点:异步处理、应用解耦、流量削峰

    缺点:系统可用性降低、系统复杂度提高、一致性问题

    5  消息队列解决方案

    ActiveMQ:是Apache旗下一个子项目,基于JMS

    Kafka:分布式消息发布订阅系统,专为大数据而生

    RocketMQ:基于JMS,阿里系旗下开源的一款分布式消息队列中间件

    RabbitMQ:基于AMQP协议,使用Erlang开发的开源消息队列中间件

    四  RabbitMQ

    1  RabbitMQ 概述

    是一款基于AMQP协议使用Erlang开发的开源消息队列中间件

    2  Erlang 概述

    一种通用的面向并发编程的解释型语言1987年问世,1998年发布第一个开源版本。目标为实现应对大并发活动的编程语言和运行环境

    3  RabbitMQ 特点

    支持多种语言客户端:RabbitMQ几乎支持所有常用编程语言,包括 Java、Python、Ruby 等等

    可视化管理界面:RabbitMQ提供一个易用的用户界面,使得用户可以监控和管理消息

    插件机制:RabbitMQ提供了许多插件(可以自行开发)灵活的分发消息策略:简单模式、工作队列模式、广播模式、路由模式、通配符模式

    支持集群:多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker可靠性:支持持久化,传输确认,发布消费确认等保证了MQ的可靠性

    4  RabbitMQ工作原理

    5  RabbitMQ 部署

    1. #安装Erlang
    2. [root@Services ~]# yum clean all; yum repolist -v
    3. [root@Services ~]# ls erlang-25.2-1.el8.x86_64.rpm
    4. erlang-25.2-1.el8.x86_64.rpm
    5. [root@Services ~]# yum -y localinstall ./erlang-25.2-1.el8.x86_64.rpm
    6. #安装RabbitMQ
    7. [root@Services ~]# ls rabbitmq-server-3.11.5-1.el8.noarch.rpm
    8. rabbitmq-server-3.11.5-1.el8.noarch.rpm
    9. [root@Services ~]# yum -y localinstall ./rabbitmq-server-3.11.5-1.el8.noarch.rpm
    10. #启动RabbitMQ服务
    11. [root@Services ~]# systemctl enable rabbitmq-server.service #设置RabbitMQ开机自启动
    12. [root@Services ~]# systemctl start rabbitmq-server.service #启动RabbitMQ服务
    13. [root@Services ~]# ss -antpul | grep :5672 #确认5672端口监听
    14. tcp LISTEN 0 128 *:5672 *:* users:(("beam.smp",pid=13298,fd=35))
    15. [root@Services ~]# rabbitmqctl status #查看RabbitMQ服务状态
    16. Status of node rabbit@Services ...
    17. Runtime
    18. OS PID: 13298
    19. OS: Linux
    20. Uptime (seconds): 15
    21. Is under maintenance?: false
    22. RabbitMQ version: 3.11.5
    23. RabbitMQ release series support status: supported
    24. Node name: rabbit@Services
    25. Erlang configuration: Erlang/OTP 25 [erts-13.1.3] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
    26. Crypto library: OpenSSL 1.1.1k FIPS 25 Mar 2021
    27. Erlang processes: 274 used, 1048576 limit
    28. Scheduler run queue: 1
    29. Cluster heartbeat timeout (net_ticktime): 60
    30. Plugins
    31. Enabled plugin file: /etc/rabbitmq/enabled_plugins
    32. Enabled plugins:
    33. Data directory
    34. Node data directory: /var/lib/rabbitmq/mnesia/rabbit@Services
    35. Raft data directory: /var/lib/rabbitmq/mnesia/rabbit@Services/quorum/rabbit@Services
    36. Config files
    37. Log file(s)
    38. * /var/log/rabbitmq/rabbit@Services.log
    39. * /var/log/rabbitmq/rabbit@Services_upgrade.log
    40. *
    41. Alarms
    42. (none)
    43. Memory
    44. Total memory used: 0.1288 gb
    45. Calculation strategy: rss
    46. Memory high watermark setting: 0.4 of available memory, computed to: 1.6343 gb
    47. reserved_unallocated: 0.0809 gb (62.85 %)
    48. code: 0.0321 gb (24.94 %)
    49. other_proc: 0.0189 gb (14.65 %)
    50. other_system: 0.0134 gb (10.44 %)
    51. other_ets: 0.0027 gb (2.14 %)
    52. atom: 0.0014 gb (1.07 %)
    53. metrics: 0.0006 gb (0.43 %)
    54. binary: 0.0002 gb (0.16 %)
    55. mnesia: 0.0001 gb (0.06 %)
    56. plugins: 0.0 gb (0.03 %)
    57. msg_index: 0.0 gb (0.02 %)
    58. quorum_ets: 0.0 gb (0.02 %)
    59. quorum_queue_dlx_procs: 0.0 gb (0.0 %)
    60. quorum_queue_procs: 0.0 gb (0.0 %)
    61. stream_queue_procs: 0.0 gb (0.0 %)
    62. stream_queue_replica_reader_procs: 0.0 gb (0.0 %)
    63. allocated_unused: 0.0 gb (0.0 %)
    64. connection_channels: 0.0 gb (0.0 %)
    65. connection_other: 0.0 gb (0.0 %)
    66. connection_readers: 0.0 gb (0.0 %)
    67. connection_writers: 0.0 gb (0.0 %)
    68. mgmt_db: 0.0 gb (0.0 %)
    69. queue_procs: 0.0 gb (0.0 %)
    70. queue_slave_procs: 0.0 gb (0.0 %)
    71. stream_queue_coordinator_procs: 0.0 gb (0.0 %)
    72. File Descriptors
    73. Total: 2, limit: 32671
    74. Sockets: 0, limit: 29401
    75. Free Disk Space
    76. Low free disk space watermark: 0.05 gb
    77. Free disk space: 5.8313 gb
    78. Totals
    79. Connection count: 0
    80. Queue count: 0
    81. Virtual host count: 1
    82. Listeners
    83. Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    84. Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    85. [root@Services ~]#
    86. #启用RabbitMQ网页管理插件
    87. [root@Services ~]# rabbitmq-plugins list #列出所有插件
    88. [root@Services ~]# rabbitmq-plugins enable rabbitmq_management #启动网页管理插件
    89. Enabling plugins on node rabbit@Services:
    90. rabbitmq_management
    91. The following plugins have been configured:
    92. rabbitmq_management
    93. rabbitmq_management_agent
    94. rabbitmq_web_dispatch
    95. Applying plugin configuration to rabbit@Services...
    96. The following plugins have been enabled:
    97. rabbitmq_management
    98. rabbitmq_management_agent
    99. rabbitmq_web_dispatch
    100. started 3 plugins.
    101. [root@Services ~]# rabbitmq-plugins list
    102. Listing plugins with pattern ".*" ...
    103. Configured: E = explicitly enabled; e = implicitly enabled
    104. | Status: * = running on rabbit@Services
    105. |/
    106. [ ] rabbitmq_amqp1_0 3.11.5
    107. [ ] rabbitmq_auth_backend_cache 3.11.5
    108. [ ] rabbitmq_auth_backend_http 3.11.5
    109. [ ] rabbitmq_auth_backend_ldap 3.11.5
    110. [ ] rabbitmq_auth_backend_oauth2 3.11.5
    111. [ ] rabbitmq_auth_mechanism_ssl 3.11.5
    112. [ ] rabbitmq_consistent_hash_exchange 3.11.5
    113. [ ] rabbitmq_event_exchange 3.11.5
    114. [ ] rabbitmq_federation 3.11.5
    115. [ ] rabbitmq_federation_management 3.11.5
    116. [ ] rabbitmq_jms_topic_exchange 3.11.5
    117. [E*] rabbitmq_management 3.11.5
    118. [e*] rabbitmq_management_agent 3.11.5
    119. [ ] rabbitmq_mqtt 3.11.5
    120. [ ] rabbitmq_peer_discovery_aws 3.11.5
    121. [ ] rabbitmq_peer_discovery_common 3.11.5
    122. [ ] rabbitmq_peer_discovery_consul 3.11.5
    123. [ ] rabbitmq_peer_discovery_etcd 3.11.5
    124. [ ] rabbitmq_peer_discovery_k8s 3.11.5
    125. [ ] rabbitmq_prometheus 3.11.5
    126. [ ] rabbitmq_random_exchange 3.11.5
    127. [ ] rabbitmq_recent_history_exchange 3.11.5
    128. [ ] rabbitmq_sharding 3.11.5
    129. [ ] rabbitmq_shovel 3.11.5
    130. [ ] rabbitmq_shovel_management 3.11.5
    131. [ ] rabbitmq_stomp 3.11.5
    132. [ ] rabbitmq_stream 3.11.5
    133. [ ] rabbitmq_stream_management 3.11.5
    134. [ ] rabbitmq_top 3.11.5
    135. [ ] rabbitmq_tracing 3.11.5
    136. [ ] rabbitmq_trust_store 3.11.5
    137. [e*] rabbitmq_web_dispatch 3.11.5
    138. [ ] rabbitmq_web_mqtt 3.11.5
    139. [ ] rabbitmq_web_mqtt_examples 3.11.5
    140. [ ] rabbitmq_web_stomp 3.11.5
    141. [ ] rabbitmq_web_stomp_examples 3.11.5
    142. [root@Services ~]# ss -antpul | grep :15672
    143. tcp LISTEN 0 128 0.0.0.0:15672 0.0.0.0:* users:(("beam.smp",pid=13298,fd=37))
    144. [root@Services ~]#
    145. #访问RabbitMQ管理页面: http://192.168.88.50:15672/

    6  RabbitMQ工作模式

    普通队列模式(Hello World)

    工作队列模式 (Work)

    扇形队列模式(Fanout)

    直接队列模式 (Direct)

    主题队列模式(Topic)

    RPC队列模式(Remote Procedure Callback)

    7  RabbitMQ消息确认机制

    • 生产者消息确认
    1. 生产者发送的消息是否到达交换器:ConfirmCalIBack
    2. 消息是否成功投放到指定消息队列:ReturnCalIBack
    • 消费者消息确认
    1. AcknowledgeMode.NONE:不确认
    2. AcknowledgeMode.AUTO:自动确认
    3. AcknowledgeMode.Manual:手动确认
    1. 1 用户管理
    2. #RabbitMQ创建用户
    3. [root@Services ~]# rabbitmqctl list_users #列出RabbitMQ已有用户
    4. Listing users ...
    5. user tags
    6. guest [administrator]
    7. [root@Services ~]# rabbitmqctl add_user admin #添加admin用户
    8. Adding user "admin" ...
    9. Password:
    10. hisadmin #密码必须设置为hisadmin,为后续项目使用
    11. Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
    12. [root@Services ~]# rabbitmqctl list_users #列出RabbitMQ已有用户
    13. Listing users ...
    14. user tags
    15. admin []
    16. guest [administrator]
    17. [root@Services ~]#
    18. 2 用户标签管理
    19. #RabbitMQ用户标签解析
    20. #超级管理员(administrator)
    21. #可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作
    22. #监控者(monitoring)
    23. #可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
    24. #策略制定者(policymaker)
    25. #可登陆管理控制台, 同时可以对policy进行管理但无法查看节点的相关信息(上图红框标识的部分)
    26. #普通管理者(management)
    27. #仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理
    28. #其他(guest)
    29. #无法登陆管理控制台,通常就是普通的生产者和消费者
    30. #给admin用户添加administrator标签
    31. [root@Services ~]# rabbitmqctl set_user_tags admin administrator
    32. Setting tags for user "admin" to [administrator] ...
    33. [root@Services ~]# rabbitmqctl list_users
    34. Listing users ...
    35. user tags
    36. admin [administrator]
    37. guest [administrator]
    38. [root@Services ~]#
    39. 3 虚拟主机管理
    40. #创建/his虚拟主机
    41. [root@Services ~]# rabbitmqctl list_vhosts #列出已有虚拟主机
    42. Listing vhosts ...
    43. name
    44. /
    45. [root@Services ~]# rabbitmqctl add_vhost /his #创建/his虚拟主机,后续项目使用
    46. Adding vhost "/his" ...
    47. [root@Services ~]# rabbitmqctl list_vhosts #列出已有虚拟主机
    48. Listing vhosts ...
    49. name
    50. /his
    51. /
    52. [root@Services ~]#
    53. 4 设置用户访问虚拟主机权限
    54. #设置admin用户对/his虚拟主机有所有权限
    55. [root@Services ~]# rabbitmqctl list_user_permissions admin #查看admin用户权限
    56. Listing permissions for user "admin" ...
    57. [root@Services ~]# rabbitmqctl set_permissions -p /his admin ".*" ".*" ".*" #设置权限
    58. Setting permissions for user "admin" in vhost "/his" ...
    59. [root@Services ~]# rabbitmqctl list_user_permissions admin #查看admin用户权限
    60. Listing permissions for user "admin" ...
    61. vhost configure write read
    62. /his .* .* .*
    63. [root@Services ~]#

     

  • 相关阅读:
    Python 查询 IP 地址段,并获取 Hostname
    python编程题——如何求一组数的全排列
    腾讯云AMD服务器标准型SA4实例CPU性能测评
    oracle性能优化:ORACLE SQL性能优化系列 (二)[转]
    电脑怎么设置开机密码?简单几步给你的电脑“上锁”
    MATLAB算法实战应用案例精讲-【数模应用】残差检验(补充篇)
    【44. 状态压缩DP(蒙德里安的梦想)】
    论文精度 —— 2016 CVPR 《Context Encoders: Feature Learning by Inpainting》
    coding 构建计划添加新的 代码仓库(外部的仓库)
    JSP日常教学促学系统myeclipse定制开发mysql数据库网页模式java编程jdbc
  • 原文地址:https://blog.csdn.net/2301_79227925/article/details/133870788