一、消息中间件相关概念

1、简介

消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台相关
的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息
队列模型,可以在分布式环境下扩展进程的通信。
当下主流的消息中间件有RabbitMQ、Kafka、RocketMQ等。其能在不同平台之间
进行通信,常用来屏蔽各种平台协议之间的特性,实现应用程序之间的协同。优点
在于能够在客户端和服务器之间进行同步和异步的连接,并且在任何时刻都可以
将消息进行传送和转发,是分布式系统中非常重要的组件,主要用来解决应用
耦合、异步通信、流量削峰等问题。

2、消息中间件主要作用

1、消息中间件主要作用解耦冗余(存储)扩展性削峰可恢复性顺序保证 缓冲异步通信
注意:
在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,
理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。

3、消息中间件的两种模式

1、P2P 模式
P2P模式包含三个角色:消息队列(Queue)、发送者(Sender)、接收者
(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。
队列保留着消息,直到它们被消费或超时。
P2P 的特点
每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列
中发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,
不管接收者有没有正在运行它不会影响到消息被发送到队列
接收者在成功接收消息之后需向队列应答成功
如果希望发送的每个消息都会被成功处理的话,那么需要P2P模
2、Pub/Sub模式
Pub/Sub模式包含三个角色:主题(Topic)、发布者(Publisher)、
订阅者(Subscriber) 。多个发布者将消息发送到Topic,系统将这些消息传递给
多个订阅者。
Pub/Sub的特点:
每个消息可以有多个消费者
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它
必须创建一个订阅者之后,才能消费发布者的消息
为了消费消息,订阅者必须保持运行的状态
如果希望发送的消息可以不被做任何处理、或者只被一个消费者处理、或者可以
被多个消费者处理的话,那么可以采用Pub/Sub模型中的软件做对应的配置。

4、常用中间件介绍与对比

1、Kafka
Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。
Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的
就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、
丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
2、RabbitMQ
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、
安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的
场景,对性能和吞吐量的要求还在其次。
3、RocketMQ
RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、
适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的
一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于
交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
RabbitMQ比Kafka可靠,Kafka更适合IO高吞吐的处理,一般应用在大数据日志
处理或对实时性(少量延迟),可靠性(少量丢数据)要求稍低的场景使用,
比如ELK日志收集。

二、RabbitMQ 详解

1、RabbitMQ 介绍

RabbitMQ 是一个在 AMQP(Advanced Message Queuing Protocol 高级消息
队列协议)基础上实现的,可复用的企业消息系统。它可以用于大型软件系统
各个模块之间的高效通信,支持高并发,支持可扩展。它支持多种客户端如:
Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,
支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、
高可用性等方面表现不俗。
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,
XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的
开发。它同时实现了一个Broker构架,这意味着消息在发送给客户端时先在中心
队列排队,对路由(Routing)、负载均衡(Load balance)或者数据持久化都有
很好的支持。

2、RabbitMQ 特点

 可靠性灵活的路由扩展性高可用性多种协议多语言客户端管理界面插件机制

3、AMQP 介绍

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层
标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,
不同的开发语言等条件的限制。

4、什么和是消息队列

MQ 全称为Message Queue, 消息队列。是一种应用程序对应用程序的通信方法。
应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用
连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用
彼此来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种
异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

5、RabbitMQ 概念介绍

Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限
分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,
每个channel代表一个会话任务。
RabbitMQ从整体上来看是一个典型的生产者消费者模型,主要负责接收、
存储和转发消息

三、RabbitMQ 单机安装部署

1.安装 erlang

[root@xingdian-server-1/]#wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm
[root@xingdian-server-1 /]# yum install erlang-23.3.4.11-1.el7.x86_64 -y

2.安装RabbitMQ

[root@xingdian-server-1 /]#  wget --content-disposition https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm
[root@xingdian-server-1 /]#  yum -y install rabbitmq-server-3.10.0-1.el7.noarch.rpm

3.启动服务

[root@xingdian-server-1 /]# systemctl start rabbitmq-server

4.配置远程访问

新版本配置文件参考:
https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbit/docs/rabbitmq.conf.example

老版本操作:
[root@qfedu.com ~]# cd /etc/rabbitmq
[root@qfedu.com ~]# cp /usr/share/doc/rabbitmq-server-3.7.13/rabbitmq.config.example /etc/rabbitmq/
[root@qfedu.com ~]# mv rabbitmq.config.example rabbitmq.config
[root@qfedu.com ~]# vim /etc/rabbitmq/rabbitmq.config
loopback_users.guest = false新版本操作:
(上传配置文件到服务器,拷贝到/etc/rabbitmq/下
[root@qfedu.com ~]# vim /etc/rabbitmq/rabbitmq.conf
loopback_users.guest = false  #改成false

5.开启web界面管理工具

[root@qfedu.com ~]# rabbitmq-plugins enable rabbitmq_management
[root@qfedu.com ~]# systemctl restart rabbitmq-server

6.浏览器访问

15627是web界面的端口
25672是rabbitmq的端口
5672程序客户端连接rabbitmq的端口游览器访问:http://192.168.222.131:15672
(15672是web访问的端口)
默认账户:guest密码:guest

四、RabbitMQ 集群部署及配置

一,原理介绍

RabbitMQ是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,
所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接
RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称默认主机名,
Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署Rabbitmq
分布式集群时要先安装Erlang,并把其中一个服务的cookie复制到另外的节点。
RabbitMQ集群中,各个RabbitMQ为对等节点,即每个节点均提供给客户端连接,
进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为
磁盘节点,为了防止机器重启后的消息消失;
RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列
通过RabbitMQ HA镜像队列进行消息队列实体复制。
普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue
来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01
和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01
节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、
rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,
要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口
总在rabbit01,会产生瓶颈。
镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以
实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,
而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部
的同步通讯会占用大量的网络带宽。

二,部署 RabbitMQ Cluster

1、rabbitmq 有 3 种模式,但集群模式是 2 种

单一模式:即单机情况不做集群,就单独运行一个 rabbitmq 而已。普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。
对于 Queue 来说,消息实体只存在于其中一个节点 rabbit01(或者 rabbit02),
rabbit01 和 rabbit02 两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01 节点的 Queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ会临时在 rabbit01、rabbit02 间进行消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer。所以 consumer 应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理 Queue。否则无论consumer 连 rabbit01 或 rabbit02,出口总在 rabbit01,会产生瓶颈。当 rabbit01 节点故障后,rabbit02 节点无法取到 rabbit01 节点中还未消费的消息实体。如果做了消息持久化,那么得等 rabbit01 节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。镜像模式: 把需要的队列做成镜像队列,存在与多个节点属于 RabbitMQ 的HA 方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。所以在对可靠性要求较高的场合中适用。

2、环境准备

3台centos7操作系统,ip分别为:
192.168.222.131
192.168.222.129
192.168.222.130

3,修改 hosts 文件 (3 台)

192.168.222.131  rabbitmq-1
192.168.222.129  rabbitmq-2
192.168.222.130  rabbitmq-3

4、保证 3 台能 ping 通 (3 台)

[root@rabbitmq-1 ~]# ping  rabbitmq-1
[root@rabbitmq-1 ~]# ping  rabbitmq-2
[root@rabbitmq-1 ~]# ping  rabbitmq-3

5、安装 rabbitmq 依赖 erlang 环境 (3 台)

[root@rabbitmq-1 ~]#wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm
[root@rabbitmq-1 ~]#yum install erlang-23.3.4.11-1.el7.x86_64.rpm -y

6、安装 rabbitmq (3 台)

[root@rabbitmq-1 ~]#wget --content-disposition https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm
[root@rabbitmq-1 ~]#yum -y install rabbitmq-server-3.10.0-1.el7.noarch.rpm

7,安装 socat (3 台)

[root@rabbitmq-1 ~]# yum install -y socat
[root@rabbitmq-2 ~]# yum install -y socat
[root@rabbitmq-3 ~]# yum install -y socat

8,配置远程访问(3台)

新版本配置文件参考:
https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbit/docs/rabbitmq.conf.example

老版本的:
[root@rabbitmq-1 ~]# cd /etc/rabbitmq
[root@rabbitmq-1 ~]# cp /usr/share/doc/rabbitmq-server-3.7.13/rabbitmq.config.example /etc/rabbitmq/
[root@rabbitmq-1 ~]# mv rabbitmq.config.example rabbitmq.config
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq.config
loopback_users.guest = false新版本:
(上传配置文件到服务器,拷贝到/etc/rabbitmq/下 )
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq.confloopback_users.guest = false

9,rabbitmq 常用命令 (3 台)

[root@rabbitmq1 ~]# systemctl start rabbitmq-server.service
每台都操作开启rabbitmq的web访问界面:
[root@rabbitmq-1 ~]# rabbitmq-plugins enable rabbitmq_management

10、账号配置

安装启动后其实还不能在其它机器访问,rabbitmq 默认的 guest 账号只能在
本地机器访问, 如果想在其它机器访问必须配置其它账号
配置管理员账号:
1,创建用户:
注意:在一台机器操作
添加用户和密码
[root@rabbitmq-1 ~]# rabbitmqctl add_user soho soso
Creating user "soho" ...
...done.
这是为管理员
[root@rabbitmq-1 ~]# rabbitmqctl set_user_tags soho administrator
Setting tags for user "soho" to [administrator] ...
...done.
查看用户
[root@rabbitmq-1 ~]# rabbitmqctl list_users
Listing users ...
guest   [administrator]
soho    [administrator]
...done.

11,第一台服务器设置权限(其他不设置)

此处设置权限时注意'.*'之间需要有空格 三个'.*'分别代表了conf权限,
read权限与write权限 例如:当没有给soho设置这三个权限前是没有权限查询
队列,在ui界面也看不见
[root@rabbitmq-1 ~]# rabbitmqctl set_permissions -p "/" soho ".*" ".*" ".*"Setting permissions for user "soho" in vhost "/" ...
...done.

12.查看端口

4369 -- erlang发现口
5672 --程序连接端口
15672 -- 管理界面ui端口
25672 -- server间内部通信口
这里需要注意:
rabbitmq默认管理员用户:guest   密码:guest

13.集群部署(3台都做)

1.首先创建好数据存放目录和日志存放目录:
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R
创建配置文件:
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf
[root@rabbitmq-1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
重启服务
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server

14.拷⻉erlang.cookie(3台都做)

Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群
景象。Erlang的集群中各节点是经由⼀个cookie来实现的,这个cookie存放
在/var/lib/rabbitmq/.erlang.cookie中,⽂件是400的权限。所以必须保证
各节点cookie⼀致,不然节点之间就⽆法通信.#如果执行# rabbitmqctl stop_app 这条命令报错:需要执行#chmod 400 .erlang.cookie#chown rabbitmq.rabbitmq .erlang.cookie
(官方在介绍集群的文档中提到过.erlang.cookie一般会存在这两个地址:第一个
是home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。
如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在{home}目录下,
也就是$home/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的,那么
这个文件会在/var/lib/rabbitmq目录下。)
[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
HOUCUGJDZYTFZDSWXTHJ
⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中。
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.139:/var/lib/rabbitmq/
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.140:/var/lib/rabbitmq/

15.将mq-2、mq-3作为内存节点加⼊mq-1节点集群中

[root@rabbitmq2 ~]# systemctl restart rabbitmq-server[root@rabbitmq-2 ~]# rabbitmqctl stop_app #停止节点,切记不是停止服务[root@rabbitmq-2 ~]# rabbitmqctl reset 如果有数据需要重置,没有则不用[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...
#rabbit@rabbitmq-1是主服务器的节点 [root@rabbitmq-2 ~]# rabbitmqctl start_app  #启动节点
Starting node 'rabbit@rabbitmq-2' ...(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是
内存节点,mq-1是磁盘节点。
(2)如果要使mq-2、mq-3都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl
change_cluster_node_type,disc(ram),前提是必须停掉rabbit应⽤

16.如果有需要使用磁盘节点加入集群

同样的操作如下:

[root@rabbitmq-2 ~]# rabbitmqctl join_cluster  rabbit@rabbitmq-1[root@rabbitmq-3 ~]# rabbitmqctl join_cluster  rabbit@rabbitmq-1

17.查看集群状态

在 RabbitMQ 集群任意节点上执行rabbitmqctl cluster_status来查看是否集群
配置成功。
在mq-1磁盘节点上面查看
[root@rabbitmq-1 ~]# rabbitmqctl cluster_status

18.登录rabbitmq web管理控制台,创建新的队列

19.根据界⾯提示创建⼀条队列

在RabbitMQ集群中,必须⾄少有⼀个磁盘节点,默认是主服务器为磁盘节点,否则
队列元数据⽆法写⼊到集群中,
当磁盘节点宕掉时,集群将⽆法写⼊新的队列元数据信息。


20,部署RabbitMQ镜像配置

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,队列内容不会
复制。如果队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在
队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,
必须要创建镜像队列。
镜像队列是基于普通的集群模式的。

1.创建镜像集群:三台机器相同操作

rabbitmq set_policy :设置策略
[root@rabbitmq-1 ~]#rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...[root@rabbitmq-2 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...[root@rabbitmq-3 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ..."^"匹配所有的队列,ha-all 策略名称为ha-all, '{"ha-mode":"all"}'策略模式
为 all 即复制到所有节点,包含新增节点。

2.设置策略介绍

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
1,Name: policy(策略)的名称
2,Pattern: queue的匹配模式(正则表达式),也就是说会匹配一组。
3,Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
4,ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodesall:表示在集群中所有的节点上进行镜像exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定ha-params:ha-mode模式需要用到的参数ha-sync-mode:进行队列中消息的同步方式,有效值为automatic(自动)和manual(手动)案例:
例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上
完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha “^hello” ‘{“ha-mode”:”exactly”,”
ha-params”:2,”ha-sync-mode”:”automatic”}’rabbitmqctl set_policy hello-ha “^hello” ‘{“ha-mode”:”nodes”,”
ha-params”:["rabbitmq-2"],”ha-sync-mode”:”automatic”}’
则此时镜像队列设置成功。
已经部署完成
将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一致。
拓展:
man手册1,5,8比较常用
1是查看一般命令,类似--help
5是查看配置文件
8系统管理相关命令
man 8 rabbitmqctl

Linux中级实战专题篇:rabbitmq(消息中间件p2p模式和pub模式,消息队列rabbitmq详解,单机安装,集群部署以及配置实战)相关推荐

  1. rabbitmq集群部署及配置

    rabbitmq集群部署及配置 文章目录 rabbitmq集群部署及配置 前言 一.原理介绍 二.部署方案 1.环境介绍 2.部署过程 小结 前言 消息中间件rabbitmq,一般以集群方式部署,主要 ...

  2. 消息队列超详解(以RabbitMQ和Kafka为例,为何使用消息队列、优缺点、高可用性、问题解决)

    消息队列超详解(以RabbitMQ和Kafka为例) 为什么要用消息队列这个东西? 先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦.异步.削峰. 解耦:现场画个图来说明一 ...

  3. Tomcat详解(七)——Tomcat使用https配置实战

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Tomcat使用https配置实战. 一.tomcat证书配置 首先,要实现https,就必须先具有tomcat证书.我们在安装tomcat的时 ...

  4. LNMP详解(七)——Nginx反向代理配置实战

    今天继续给大家介绍Linux运维的相关知识,本文主要内容是Nginx反向代理配置实战. 一.系统架构简介 在生产环境中,我们有时需要使用Nginx做反向代理功能,其架构如下所示: 在上图中,所有的外界 ...

  5. ISCSI详解(四)——ISCSI服务端配置实战

    今天继续给大家介绍Linux运维相关知识,本文主要内容是ISCSI服务端配置实战. 一.ISCSI安装 首先,我们来安装ISCSI,在安装ISCSI之前,我们需要先安装EPEL的YUM源,执行命令: ...

  6. Tomcat详解(九)——Tomcat虚拟主机配置实战

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Tomcat虚拟主机配置实战. 一.虚拟主机目录配置 首先,我们给Tomcat的两个虚拟主机创建根目录,执行命令: mkdir -p /var/ ...

  7. RabbitMQ 集群部署及配置

    文章目录 一.rabbitmq简述 Rabbitmq 有 3 种模式,但集群模式是 2 种 二.环境准备及软件安装 修改 hosts 文件 (3 台) 三.账号配置 四.启动 rabbitmq 内置 ...

  8. Linux系统集群架构线上项目配置实战(一)

    项目整体介绍 **整个项目包括以下几个应用工程** 1. 用户APP 2. 商家APP 3. 业务平台管理后台 4. 商家业务管理后台 5. 官网 **整体项目规划设计如下** 1. 用户APP采用J ...

  9. rabbitMQ消息队列 consume详解

    实现消费者的方法就是 $channel->basic_consume("TestQueue", "", false, false, false, fals ...

最新文章

  1. led动态显示 c语言,单片机LED点阵的纵向移动(动态显示)
  2. java执行jar中的main_浅谈java 执行jar包中的main方法
  3. oracle 五种索引创建
  4. Jfreechart显示数据点图表(线上可以显示点数据)
  5. .NET Core开发实战(第24课:文件提供程序:让你可以将文件放在任何地方)--学习笔记...
  6. 时间复杂度为m+n,的一种模式匹配,适合子串不是很长的匹配
  7. 系统辨识理论及应用_企业战略分析的理论工具
  8. docker容器运行后退出,怎么才能一直运行?【转】
  9. 【转载】 three.js 相机camera位置属性设置详解
  10. 在中国在行其道的智慧城市,为何折戟多伦多? | 凌云时刻
  11. ubuntu下mingw32交叉编译环境搭建
  12. 如何用python做动画_如何使用python制作简单的动画?
  13. bzoj1627 / P2873 [USACO07DEC]泥水坑Mud Puddles
  14. formula的java用法_java-@Formula无法在休眠状态下与对象一起使用
  15. MAC通过HDMI转VGA转接头连接显示器
  16. 浏览器端反爬虫特征收集之字体检测
  17. android中gravity什么意思,浅谈android 中layout_gravity和gravity
  18. Excel 2007中日历控件使用
  19. 卡苹果6plus在线_公交卡在线充值、年检……城市智慧公交再升级!
  20. 移动端overflow无效问题

热门文章

  1. 动态添加表格中下拉框
  2. 华为机试在线训练-牛客网(15)数据分类处理
  3. 《神鬼寓言3》非常不给力
  4. Flex3特效的基本用法(三)特效组件2
  5. 交巡警求全市距离MATLAB程序,数学建模国赛优秀论文-交巡警服务平台的设置与调度.doc...
  6. 应届生/社招面试最爱问的几道Java基础问题
  7. GAGE Cobra/CobraMax系列PCI/PCIe采集卡
  8. 服务器安装信息失败怎么回事,安装MSDE“配置服务器失败,请参考服务器错误日志和安装错误日志,以了解更多信息”?...
  9. 知乎热搜,最全1184页Spring全家桶面试资料库,学习完大厂offer随你挑
  10. 用CPU 0.2s轻松识别十万类,超强图像识别系统PP-ShiTu重磅发布