系统环境Ubuntu 22.10
## 1、识别以太网
```shell
ip a
sudo lshw -class network
```
## 2、更改以太网接口逻辑名称
修改配置`/etc/netplan/99_config.yaml`,配置文件没有可以自己命名新建:
```yaml
network:
version: 2
renderer: networkd
ethernets:
eth_lan0:
dhcp4: true
match:
macaddress: 00:11:22:33:44:55 # 网卡mac地址,逻辑名称配置匹配哪个网卡
set-name: eth_lan0 # 更改为所需的逻辑名称
```
执行`sudo netplan apply`命令生效
## 3、临时ip地址分配
使用ip命令分配,系统重启会失效
```shell
# 修改ip地址和子网掩码
sudo ip addr add 10.102.66....
JetBrains IntelliJ IDEA 最新激活码
适用于JetBrains家族所有ide,包括IntelliJ IDEA ,PhpStorm,WebStorm,GoLand,PyCharm,DataGrip等
有人搭建了网站:https://jetbra.in/s
下载顶部提示的文件: ja-netfilter-all.zip,按照说明使用。
ja-netfilter-all.zip 下载提示的下面一行是一些收集的授权服务器。
...
场景是我们在本地电脑上安装了git,并初始化了一个测试仓库,但是并没有安装`gitlab`这种东西,那我们怎么可以通过`url`来`git pull`和`git push`仓库的内容呢。
这里以linux系统为例,在不再多添加其他依赖的情况下操作。
测试仓库路径`/home/dev/git/test`,初始化仓库的时候需要初始化成一个裸仓库`git init --bare`,否则需要做一些其他设置才能正常`push`。
1. 和git仓库在同一台电脑上面
这种情况可以用`file`协议来操作就可以,`git clone file:///home/dev/git/test`。
比如你在本机测试`Jenkins`的时候,配置`Pipeline`的git仓库,就可以这样填写仓库地址:`file:///home/dev/git/test`。
2. 在不同电脑上面操作git仓库
这种情况可以用ssh协议来操作,`git clone ssh://dev@192.168.2.199:/home/dev/git/test`,`dev`是登录用户。
`19...
利用RabbitMQ来做一个RPC的客户端和服务端。
输出斐波那契数列为例子。
rpc_server.php:
```php
...
Routing那一文是日志系统还是有不足的地方,如果我们想既基于选择和发送消息的来源来接收日志呢?
比如像Linux的`syslog`一样,可以基于消息的级别(info/warn..),产生消息的来源(auth/cron)来记录日志。
要实行这样的功能,就需要`topic`类型的exchange了。
`topic`类型的exchange,`routing_key`参数值不能随便设置,需要是一个点(`.`)分隔的词列表,词可以随意设置,一般是使用有意义的内容。比如`stock.usd.nyse`,数据长度是最大是255个字符。
`binding key`也是同样的格式,可以有两个特殊的字符:
- `*`:匹配单个词。
- `#`:匹配0个或多个词。
比如`*.orange.*`、`lazy.#`,这里的词指的是点分隔的完整字符。
生产者:
```php
...
接着上篇发布-订阅的日志记录,如果只订阅消息的子集,比如,只记录错误日志到硬盘,全部的消息打印出来,那么就需要用到这里要讲的内容了。
`exchang`的绑定操作可以传递一个叫`routing_key`的额外参数,这里把它称为`binding key`。
```php
$binding_key = 'black';
$channel->queue_bind($queue_name, $exchange_name, $binding_key);
```
`binding key`依赖于`exchange`的类型,`fanout`类型是会忽略这个值的。
在日志系统里面,如果需要根据消息级别过滤消息,就是不同的订阅者收到不同级别的错误日志消息会有不同的处理方式。
之前用的`fanout`exchange类型就不行了,这个类型只能广播消息,而没有其他的灵活性了。
这里的需求需要用`direct`exchange类型来代替,这种类型的算法是消息会推送到`binding key`和`routing key`相同的队列。
> 这里`binding ke...
一个消息分发给多个消费者,这就叫做发布-订阅模式。
作为示例,这里构建一个日志系统,由两部分组成,一个是发送日志消息,另一个是接收和打印。
**exchange**
`exchange`就是接收生产者的消息,然后推送给队列的一个东西,类似邮局。
`exchange`有几种类型,`direct`, `topic`, `headers` 和`fanout`。
不同的`exchange`类型会有不同的行为,各种类型的使用在后续文章会有介绍,这里我们先只关注最后一种。
`$channel->exchange_declare('logs', 'fanout', false, false, false);`
`fanout`类型是广播消息到所有已知的队列。
创建一个名字是`logs`的`exchange`。
```php
$channel->exchange_declare('logs', 'fanout', false, false, false);
$channel->basic_publish($msg, 'logs');
```
...
### Nginx支持的负载均衡方案:
- 轮训:循环分发请求;
- 最少连接:下一个请求会分发给连接数最少的服务器;
- ip-hash:用基于ip的hash方法计算来决定使用哪个服务器。
### 最简单的负载均衡配置
```nginx
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
```
测试Nginx是1.10.3版本,系统是ubuntu17.04。
默认80端口是主机用来做负载均衡,8080 - 8082三个端口分布做三个服务主机用来测试。
在`/etc/nginx/ngin...
可以使用`composer init`来初始化一个测试项目,然后用`composer require php-amqplib/php-amqplib`来引入`RabbitMQ`开发包,然后就可以进行以下测试了。
下面是一个简单的生产者和消费者代码。
如果运行多个消费者,生产者的消息会通过轮训的方式平均分配给消费者。
生产者(消息发送者):
**producer.php**
```php
...
官网下载二进制包,或者用对应系统的仓库安装就可以了。
安装好后默认服务是启动的,可以使用下列命令查看状态:
`service rabbitmq-server status`或者`systemctl status rabbitmq-server`。
服务是以`rabbitmq`用户运行的。
需要打开的端口:
- 4369:RabbitMQ and CLI 工具用来节点发现的。
- 5672,5671:客户端AMQP通信端口。
- 25672:节点间和CLI工具的通信端口,这个端口的是动态的,AMQP端口+20000计算而来。如果不需要外部通信,不需要公开端口。
- 35672 - 35682:用于CLI工具和节点间通信用。动态分配的,计算方法是上的端口号+10000 - 上面的端口号+10010。
- 15672:HTTP API客户端,management UI和rabbitmqadmin使用。
- 61613,61614:STOMP客户端使用。
- 1883, 8883: MQTT客户端使用。
- 15674: STOMP-over-WebSocke...