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

news2024/11/19 14:38:53

一  搜索服务

1  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 部署

#OpenJDK环境部署
[root@Services ~]# yum clean all; yum repolist -v
...
Total packages: 8,265
[root@Services ~]# yum -y install java-1.8.0-openjdk-devel.x86_64   #安装OpenJDk
...
Complete!
[root@Services ~]#

[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软链接
[root@Services ~]# vim /etc/bashrc                                  #配置环境变量
[root@Services ~]# tail -3 /etc/bashrc 
export JAVA_HOME="/usr/lib/jvm/jdk/"        #声明JAVA_HOME变量
export CLASSPATH=.                          #声明类库加载目录
export PATH=${JAVA_HOME}/bin/:$PATH         #声明PATH变量
[root@Services ~]# source /etc/bashrc       #刷新bash环境
[root@Services ~]# echo ${JAVA_HOME}                                #测试JAVA_HOME变量
/usr/lib/jvm/jdk/
[root@Services ~]# which java                           
/usr/lib/jvm/jdk/bin/java
[root@Services ~]# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
[root@Services ~]# 

#安装Elasticsearch服务
[root@Services ~]# ls elasticsearch-6.8.0.rpm 
elasticsearch-6.8.0.rpm
[root@Services ~]# yum -y localinstall ./elasticsearch-6.8.0.rpm 

#配置Elasticsearch服务
[root@Services ~]# vim /etc/elasticsearch/elasticsearch.yml 
[root@Services ~]# cat /etc/elasticsearch/elasticsearch.yml | grep -Pv "^\s*(#|$)"
node.name: Services                 #ES节点名称
path.data: /var/lib/elasticsearch   #ES数据存储路径
path.logs: /var/log/elasticsearch   #ES日志存储路径
network.host: 0.0.0.0               #监听地址
http.port: 9200                     #HTTP端口
[root@Services ~]#

#启动Elasticsearch服务
[root@Services ~]# systemctl enable elasticsearch.service   #设置服务开机自启动
[root@Services ~]# systemctl start elasticsearch.service    #启动Elasticsearch服务
[root@Services ~]# ss -antpul | grep java
tcp   LISTEN 0      128      *:9200      *:*    users:(("java",pid=9847,fd=209))
tcp   LISTEN 0      128      *:9300      *:*    users:(("java",pid=9847,fd=196))
[root@Services ~]# 

#测试Elasticsearch服务
[root@Services ~]# curl http://localhost:9200/          #访问9200端口,返回一段json数据
{
  "name" : "Services",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "1cf7N861QBC_C0RE8gm0OA",
  "version" : {
    "number" : "6.8.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "65b6179",
    "build_date" : "2019-05-15T20:06:13.172855Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
[root@Services ~]# 

5  Elasticsearch 插件

Elasticsearch插件IK分词器

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

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

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

Elasticsearch插件安装方式
#插件安装方法
#方式一:从官网下载ES插件,通常为ZIP格式,解压到/usr/share/elasticsearch/plugins/目录
#方式二:使用elasticsearch-plugin命令
        #elasticsearch-plugin install file://path/xx.zip
        #elasticsearch-plugin install http://addresss/xx
        #elasticsearch-plugin install ftp://address/xx
#方式三:容器
IK分词器插件
#本地安装IK分词器插件
[root@Services ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin list   #查看插件列表
[root@Services ~]# ls elasticsearch-analysis-ik-6.8.0.zip 
elasticsearch-analysis-ik-6.8.0.zip
[root@Services ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install    file:///root/elasticsearch-analysis-ik-6.8.0.zip                            #安装插件
-> Downloading file:///root/elasticsearch-analysis-ik-6.8.0.zip
[=================================================] 100%   
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed analysis-ik
[root@Services ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin list   #查看插件列表
analysis-ik
[root@Services ~]# 

#测试IK分词器
[root@Services ~]# systemctl restart elasticsearch.service          #重启服务加载插件

[root@Services ~]#  curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_analyze?pretty -d '
{
"analyzer": "standard",
"text": "华为手机"
}'                                                                  #测试标准分词
{
  "tokens" : [
    {
      "token" : "华",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "为",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "手",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "机",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    }
  ]
}
[root@Services ~]#

[root@Services ~]# curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_analyze?pretty -d '   
{
    "analyzer": "ik_smart",
    "text": "华为手机"
}'                                                                  #测试IK分词器
{
  "tokens" : [
    {
      "token" : "华为",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "手机",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}
[root@Services ~]# 
HEAD插件(容器部署)
#安装podman工具
[root@Services ~]# yum clean all; yum repolist -v
...
Total packages: 8,265
[root@Services ~]# yum -y install podman                    #安装podman
Complete!
[root@Services ~]# podman --version                         #确认podman安装
podman version 4.0.2
[root@Services ~]# 

#导入ES-HEAD镜像
[root@Services ~]# ls elasticsearch-head.tar 
elasticsearch-head.tar
[root@Services ~]# podman images                            #查看本地已有镜像
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[root@Services ~]# podman load -i elasticsearch-head.tar    #导入ES-HEAD插件镜像
Getting image source signatures
Copying blob 604c78617f34 done  
Copying blob 60a0858edcd5 done  
Copying blob b6ca02dfe5e6 done  
Copying blob 0a5e2b2ddeaa done  
Copying blob 53c779688d06 done  
Copying blob fa18e5ffd316 done  
Copying blob cf2eea3d6e04 done  
Copying blob d556e03b8284 done  
Copying blob 95ea76455b84 done  
Copying blob ce5705289a91 done  
Copying blob d09533ddfc0d done  
Copying blob eb415bbb4658 done  
Copying blob f418a5a1e636 done  
Copying config d008a8ccd0 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): localhost/elasticsearch-head:latest
[root@Services ~]# podman images                            #确认ES-HEAD镜像已导入
REPOSITORY                    TAG         IMAGE ID      CREATED      SIZE
localhost/elasticsearch-head  latest      d008a8ccd029  7 weeks ago  862 MB
[root@Services ~]# 

#启动ES-HEAD容器
[root@Services ~]# podman ps                                #查看有运行的容器,应为空
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@Services ~]# podman run -d --name es-head --hostname es-head -p 9100:9100 localhost/elasticsearch-head:latest                         #后台运行ES-HEAD容器
f222cb764271574148d31b184bd0aebda419ce3ebd43843c0ff8f1f4dc6ba53c
[root@Services ~]# podman ps                                #确认ES-HEAD容器已运行
CONTAINER ID  IMAGE                                COMMAND               CREATED        STATUS            PORTS                   NAMES
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
[root@Services ~]# ss -antpul | grep 9100                   #确认9100端口被监听
tcp   LISTEN 0      128          0.0.0.0:9100      0.0.0.0:*    users:(("conmon",pid=12651,fd=5))
[root@Services ~]# 

#修改Elasticsearch配置,开启跨域访问
[root@Services ~]# vim /etc/elasticsearch/elasticsearch.yml 
[root@Services ~]# sed -rn '59,61p' /etc/elasticsearch/elasticsearch.yml 
http.port: 9200
http.cors.enabled: true         #开启HTTP跨域访问支持
http.cors.allow-origin: "*"     #允许跨域的访问范围
[root@Services ~]# systemctl restart elasticsearch.service 
[root@Services ~]# ss -antpul | grep java
tcp   LISTEN 0      128    *:9200      *:*    users:(("java",pid=12764,fd=214))
tcp   LISTEN 0      128    *:9300      *:*    users:(("java",pid=12764,fd=201))
[root@Services ~]# 

#测试访问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)

#测试指定API
[root@Services ~]# curl -H "Content-Type: application/json" -XGET http://localhost:9200/_cat/health
1677142976 09:02:56 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
[root@Services ~]# curl -H "Content-Type: application/json" -XGET http://localhost:9200/_cat/health?v
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1677142979 09:02:59  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%
[root@Services ~]#

#创建索引(必做练习)
[root@Services ~]# curl -H "Content-Type: application/json" -XPUT http://localhost:9200/tedu/ -d '
{ "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        }
    }
}'
{"acknowledged":true,"shards_acknowledged":true,"index":"tedu"}[root@Services ~]# 

 

#调用API批量导入数据
[root@Services ~]# ls data.sh logs.jsonl accounts.json 
accounts.json  data.sh  logs.jsonl
[root@Services ~]# cat data.sh 
#!/bin/bash
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/account/user/_bulk --data-binary @accounts.json
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_bulk --data-binary @logs.jsonl
[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 部署

#安装Erlang
[root@Services ~]# yum clean all; yum repolist -v
[root@Services ~]# ls erlang-25.2-1.el8.x86_64.rpm 
erlang-25.2-1.el8.x86_64.rpm
[root@Services ~]# yum -y localinstall ./erlang-25.2-1.el8.x86_64.rpm 

#安装RabbitMQ
[root@Services ~]# ls rabbitmq-server-3.11.5-1.el8.noarch.rpm 
rabbitmq-server-3.11.5-1.el8.noarch.rpm
[root@Services ~]# yum -y localinstall ./rabbitmq-server-3.11.5-1.el8.noarch.rpm 

#启动RabbitMQ服务
[root@Services ~]# systemctl enable rabbitmq-server.service #设置RabbitMQ开机自启动    
[root@Services ~]# systemctl start rabbitmq-server.service  #启动RabbitMQ服务
[root@Services ~]# ss -antpul | grep :5672                  #确认5672端口监听
tcp   LISTEN 0      128    *:5672     *:*    users:(("beam.smp",pid=13298,fd=35))

[root@Services ~]# rabbitmqctl status                       #查看RabbitMQ服务状态
Status of node rabbit@Services ...
Runtime

OS PID: 13298
OS: Linux
Uptime (seconds): 15
Is under maintenance?: false
RabbitMQ version: 3.11.5
RabbitMQ release series support status: supported
Node name: rabbit@Services
Erlang configuration: Erlang/OTP 25 [erts-13.1.3] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
Crypto library: OpenSSL 1.1.1k  FIPS 25 Mar 2021
Erlang processes: 274 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60

Plugins

Enabled plugin file: /etc/rabbitmq/enabled_plugins
Enabled plugins:


Data directory

Node data directory: /var/lib/rabbitmq/mnesia/rabbit@Services
Raft data directory: /var/lib/rabbitmq/mnesia/rabbit@Services/quorum/rabbit@Services

Config files


Log file(s)

 * /var/log/rabbitmq/rabbit@Services.log
 * /var/log/rabbitmq/rabbit@Services_upgrade.log
 * <stdout>

Alarms

(none)

Memory

Total memory used: 0.1288 gb
Calculation strategy: rss
Memory high watermark setting: 0.4 of available memory, computed to: 1.6343 gb

reserved_unallocated: 0.0809 gb (62.85 %)
code: 0.0321 gb (24.94 %)
other_proc: 0.0189 gb (14.65 %)
other_system: 0.0134 gb (10.44 %)
other_ets: 0.0027 gb (2.14 %)
atom: 0.0014 gb (1.07 %)
metrics: 0.0006 gb (0.43 %)
binary: 0.0002 gb (0.16 %)
mnesia: 0.0001 gb (0.06 %)
plugins: 0.0 gb (0.03 %)
msg_index: 0.0 gb (0.02 %)
quorum_ets: 0.0 gb (0.02 %)
quorum_queue_dlx_procs: 0.0 gb (0.0 %)
quorum_queue_procs: 0.0 gb (0.0 %)
stream_queue_procs: 0.0 gb (0.0 %)
stream_queue_replica_reader_procs: 0.0 gb (0.0 %)
allocated_unused: 0.0 gb (0.0 %)
connection_channels: 0.0 gb (0.0 %)
connection_other: 0.0 gb (0.0 %)
connection_readers: 0.0 gb (0.0 %)
connection_writers: 0.0 gb (0.0 %)
mgmt_db: 0.0 gb (0.0 %)
queue_procs: 0.0 gb (0.0 %)
queue_slave_procs: 0.0 gb (0.0 %)
stream_queue_coordinator_procs: 0.0 gb (0.0 %)

File Descriptors

Total: 2, limit: 32671
Sockets: 0, limit: 29401

Free Disk Space

Low free disk space watermark: 0.05 gb
Free disk space: 5.8313 gb

Totals

Connection count: 0
Queue count: 0
Virtual host count: 1

Listeners

Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
[root@Services ~]# 

#启用RabbitMQ网页管理插件
[root@Services ~]# rabbitmq-plugins list                        #列出所有插件
[root@Services ~]# rabbitmq-plugins enable rabbitmq_management  #启动网页管理插件
Enabling plugins on node rabbit@Services:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@Services...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.
[root@Services ~]# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@Services
 |/
[  ] rabbitmq_amqp1_0                  3.11.5
[  ] rabbitmq_auth_backend_cache       3.11.5
[  ] rabbitmq_auth_backend_http        3.11.5
[  ] rabbitmq_auth_backend_ldap        3.11.5
[  ] rabbitmq_auth_backend_oauth2      3.11.5
[  ] rabbitmq_auth_mechanism_ssl       3.11.5
[  ] rabbitmq_consistent_hash_exchange 3.11.5
[  ] rabbitmq_event_exchange           3.11.5
[  ] rabbitmq_federation               3.11.5
[  ] rabbitmq_federation_management    3.11.5
[  ] rabbitmq_jms_topic_exchange       3.11.5
[E*] rabbitmq_management               3.11.5
[e*] rabbitmq_management_agent         3.11.5
[  ] rabbitmq_mqtt                     3.11.5
[  ] rabbitmq_peer_discovery_aws       3.11.5
[  ] rabbitmq_peer_discovery_common    3.11.5
[  ] rabbitmq_peer_discovery_consul    3.11.5
[  ] rabbitmq_peer_discovery_etcd      3.11.5
[  ] rabbitmq_peer_discovery_k8s       3.11.5
[  ] rabbitmq_prometheus               3.11.5
[  ] rabbitmq_random_exchange          3.11.5
[  ] rabbitmq_recent_history_exchange  3.11.5
[  ] rabbitmq_sharding                 3.11.5
[  ] rabbitmq_shovel                   3.11.5
[  ] rabbitmq_shovel_management        3.11.5
[  ] rabbitmq_stomp                    3.11.5
[  ] rabbitmq_stream                   3.11.5
[  ] rabbitmq_stream_management        3.11.5
[  ] rabbitmq_top                      3.11.5
[  ] rabbitmq_tracing                  3.11.5
[  ] rabbitmq_trust_store              3.11.5
[e*] rabbitmq_web_dispatch             3.11.5
[  ] rabbitmq_web_mqtt                 3.11.5
[  ] rabbitmq_web_mqtt_examples        3.11.5
[  ] rabbitmq_web_stomp                3.11.5
[  ] rabbitmq_web_stomp_examples       3.11.5
[root@Services ~]# ss -antpul | grep :15672
tcp LISTEN 0 128   0.0.0.0:15672  0.0.0.0:*    users:(("beam.smp",pid=13298,fd=37))
[root@Services ~]# 

#访问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  用户管理

#RabbitMQ创建用户
[root@Services ~]# rabbitmqctl list_users           #列出RabbitMQ已有用户
Listing users ...
user    tags
guest   [administrator]
[root@Services ~]# rabbitmqctl add_user admin       #添加admin用户
Adding user "admin" ...
Password: 
hisadmin        #密码必须设置为hisadmin,为后续项目使用
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
[root@Services ~]# rabbitmqctl list_users           #列出RabbitMQ已有用户
Listing users ...
user    tags
admin   []
guest   [administrator]
[root@Services ~]# 

2  用户标签管理

#RabbitMQ用户标签解析 
    #超级管理员(administrator)
        #可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
    #监控者(monitoring)
        #可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
    #策略制定者(policymaker)
        #可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
    #普通管理者(management)
        #仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
    #其他(guest)
        #无法登陆管理控制台,通常就是普通的生产者和消费者
        
#给admin用户添加administrator标签
[root@Services ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
[root@Services ~]# rabbitmqctl list_users
Listing users ...
user    tags
admin   [administrator]
guest   [administrator]
[root@Services ~]# 

3  虚拟主机管理

#创建/his虚拟主机
[root@Services ~]# rabbitmqctl list_vhosts          #列出已有虚拟主机
Listing vhosts ...  
name
/
[root@Services ~]# rabbitmqctl add_vhost /his       #创建/his虚拟主机,后续项目使用
Adding vhost "/his" ...
[root@Services ~]# rabbitmqctl list_vhosts          #列出已有虚拟主机
Listing vhosts ...
name
/his
/
[root@Services ~]#

4  设置用户访问虚拟主机权限

#设置admin用户对/his虚拟主机有所有权限
[root@Services ~]# rabbitmqctl list_user_permissions admin      #查看admin用户权限
Listing permissions for user "admin" ...

[root@Services ~]# rabbitmqctl set_permissions -p /his admin ".*" ".*" ".*" #设置权限
Setting permissions for user "admin" in vhost "/his" ...
[root@Services ~]# rabbitmqctl list_user_permissions admin      #查看admin用户权限
Listing permissions for user "admin" ...
vhost   configure       write   read
/his    .*              .*      .*
[root@Services ~]# 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GEO生信数据挖掘(九)WGCNA分析

第六节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。第七节延续上个数据&#xff0c;进行了差异分析。 第八节对差异基因进行富集分析。…

windows内网渗透正向代理

内网渗透正向代理 文章目录 内网渗透正向代理1 正向代理图2 环境准备2.1 正向代理需求&#xff1a; 3 网卡配置3.1 【redream】主机3.2 【base】主机双网卡3.3 【yvkong】网卡设置 4 启动4.1【redream】网卡配置&#xff1a;4.2【base】网卡配置&#xff1a;4.3【yvkong】网卡地…

ArcGis打开影像显示全黑解决方法

我们加载图像&#xff0c;显示如下&#xff1a; 解决方法&#xff1a; 问题分析&#xff1a;Gamma值高于1影像亮化&#xff0c;低于1影像暗化。栅格影像导入进来呈现黑色&#xff0c;可能是因为影像的“Gamma校正”设置出现问题&#xff0c;影响了影像的拉伸度、亮度、对比度等…

FTP客户端lftp

目录 准备 1 lftp介绍 2 lftp语法 3 lftp选项 4 下载 4.1 服务端 4.2 客户端 5 上传 5.1 客户端 5.2 服务端 准备 两台虚拟机&#xff08;且保证互通&#xff09;关闭防火墙和SeLinux。 关闭防火墙 systemctl stop firewalld 关闭SeLinux setenforce 0 vi /etc/s…

12-k8s-HPA自动扩缩容

文章目录 一、k8s弹性伸缩类型二、HPA原理三、metrics-server插件四、创建nginx提供负载测试五、部署HPA master操作即可 一、k8s弹性伸缩类型 Cluster-Autoscale: 集群容量(node数量)自动伸缩&#xff0c;跟自动化部署相关的&#xff0c;依赖iaas的弹性伸缩&#xff0c;主要用…

学术特稿 | 著名书法家项国就:中国古代书法章草美学展现的形式分析

、 论文入编&#xff1a;大型综合美术类核心期刊《新美域》杂志2023年第七期。 中国古代书法章草美学展现的形式分析 摘要&#xff1a;本文旨在探讨中国古代书法风格章草的美学特点、审美价值以及代表性作品和艺术家。章草的美学特点体现在简洁流畅的笔画、清晰规整的字形结构以…

[架构之路-237]:目标系统 - 纵向分层 - 网络通信 - DNS的递归查询和迭代查询

目录 一、DNS协议与DNS系统架构 1.1 什么是DNS协议 1.2 为什么需要DNS协议 1.3 DNS系统架构 二、DNS系统的查询方式 2.1 递归与迭代的比较 2.2 DNS递归查询 2.3 DNS迭代查询 一、DNS协议与DNS系统架构 1.1 什么是DNS协议 DNS&#xff08;Domain Name System&#xff…

nRF52832蓝牙从机

具体内容直接参考《nRF52832开发指南》 本文仅对关键内容和容易搞错的内容进行描述。 广播事件 扫描事件 连接事件 从机框架 日志配置和初始化log_init&#xff0c;具体参考手册和示例程序&#xff1b;APP定时器初始化timers_init&#xff0c;具体参考手册和示例程序&…

EFLK与logstash过滤

目录 一、Filebeat工作原理&#xff1a; 二、为什么要使用Filebeat&#xff1a; 三、Filebeat和Logstash的区别&#xff1a; 四、logstash 的过滤插件&#xff1a; 五、FilebeatELK 部署&#xff1a; 1. 安装filebeat&#xff1a; 2. 设置 filebeat 的主配置文件&#xff1…

SpringBoot面试题7:SpringBoot支持什么前端模板?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot支持什么前端模板? Spring Boot支持多种前端模板,其中包括以下几种常用的: Thymeleaf:Thymeleaf是一种服务器端Java模板引擎,能够…

【2】c++11新特性(稳定性和兼容性)—>超长整型 long long

c11标准要求long long整型可以在不同的平台上有不同的长度&#xff0c;但是至少64位&#xff0c;long long整型有两种&#xff1a; 有符号long long&#xff1a;–对应类型的数值可以使用LL或者ll后缀 long long num1 123456789LL; long long num2 123456789ll;无符号unsign…

Linux性能优化--实用工具:性能工具助手

8.0 概述 本章介绍一些在Linux系统上可用的实用程序&#xff0c;它们能够加强性能工具的有效性和可用性。实用工具本身不是性能工具&#xff0c;但是当它们与性能工具一起使用时&#xff0c;它们可以帮助完成如下功能&#xff1a;自动执行繁琐的任务、分析性能统计数据&#x…

【机器学习】逻辑回归

文章目录 逻辑回归定义损失函数正则化 sklearn里面的逻辑回归 逻辑回归 逻辑回归&#xff0c;是一种名为“回归”的线性分类器&#xff0c;其本质是由线性回归变化而来的&#xff0c;一种广泛使用于分类问题中的广义回归算法。 线性回归是机器学习中最简单的的回归算法&#…

基本分段存储管理方式(分段,段表,地址转换以及与分页管理对比)

1.分段 1.进程的地址空间: 按照程序自身的逻辑关系划分为若干个段&#xff0c;每个段都有一个段名 &#xff08;在低级语言中&#xff0c;程序员使用段名来编程&#xff09;&#xff0c;每段从0开始编址. 2.内存分配规则: 以段为单位进行分配&#xff0c;每个段在内存中占据…

BIM轻量化技术简介

BIM轻量化技术是指在工程建筑的BIM模型建立之后&#xff08;利用专业的BIM建模软件&#xff0c;比如Autodesk Revit, Bentley MicroStation, DS Catia等&#xff09;&#xff0c;通过对BIM模型的压缩处理等技术手段&#xff0c;让BIM可以在各类WEB浏览器、移动App上被使用的技术…

【网络协议】聊聊DHCP和PXE 工作原理

DHCP 动态主机配置协议 对于每个主机来说&#xff0c;只要连接了网络&#xff0c;那么就会配置一个IP地址&#xff0c;那么这个IP地址&#xff0c;如果是手动配置的话&#xff0c;对于公司内部的人员来说都要找IT进行配置&#xff0c;这个太浪费人力物力了&#xff0c;所以解决…

【软件设计师】面向对象类图的六种关系

面向对象类图的六种关系&#xff08;继承、实现、依赖、关联、聚合、组合&#xff09; 1、泛化&#xff08;继承&#xff09;2、实现3、依赖4、关联5、聚合6、组合 面向对象类图的六种关系&#xff08;继承、实现、依赖、关联、聚合、组合&#xff09; 进行面向对象设计时&…

为什么要做服务器监控?

应用程序一般都是在服务器上运行&#xff0c;可以这么说&#xff0c;服务器就是一家公司的全部&#xff0c;因此&#xff0c;服务器必须要监控&#xff0c;来确保性能和正常运行。 如果服务器宕机&#xff0c;那会导致很多问题&#xff0c;会给公司带来巨大的损失&#xff0c;…

[论文精读]Semi-Supervised Classification with Graph Convolutional Networks

论文原文&#xff1a;[1609.02907] Semi-Supervised Classification with Graph Convolutional Networks (arxiv.org) 论文代码&#xff1a;GitHub - tkipf/gcn: Implementation of Graph Convolutional Networks in TensorFlow 英文是纯手打的&#xff01;论文原文的summari…

小黑子—MyBatis:第五章

MyBatis入门5.0 十三 小黑子的MyBatis高级映射及延迟加载13.1 多对一映射13.1.1 实体类关系怎么设计13.1.2 第一种方式&#xff1a;级联属性映射13.1.2 第二种方式 association 关联13.1.3 第三种方式 分步查询13.1.3 延迟加载 13.2 一对多映射13.2.1 一对多的映射原理13.2.2 第…