利用RabbitMQ来做一个RPC的客户端和服务端。
输出斐波那契数列为例子。
rpc_server.php:
```php
...
发布日期:
2018-11-15
分类:
其他
浏览量:
5453
阅读全文
Routing那一文是日志系统还是有不足的地方,如果我们想既基于选择和发送消息的来源来接收日志呢?
比如像Linux的`syslog`一样,可以基于消息的级别(info/warn..),产生消息的来源(auth/cron)来记录日志。
要实行这样的功能,就需要`topic`类型的exchange了。
`topic`类型的exchange,`routing_key`参数值不能随便设置,需要是一个点(`.`)分隔的词列表,词可以随意设置,一般是使用有意义的内容。比如`stock.usd.nyse`,数据长度是最大是255个字符。
`binding key`也是同样的格式,可以有两个特殊的字符:
- `*`:匹配单个词。
- `#`:匹配0个或多个词。
比如`*.orange.*`、`lazy.#`,这里的词指的是点分隔的完整字符。
生产者:
```php
...
发布日期:
2018-11-15
分类:
其他
浏览量:
4745
阅读全文
接着上篇发布-订阅的日志记录,如果只订阅消息的子集,比如,只记录错误日志到硬盘,全部的消息打印出来,那么就需要用到这里要讲的内容了。
`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...
发布日期:
2018-11-15
分类:
其他
浏览量:
5071
阅读全文
一个消息分发给多个消费者,这就叫做发布-订阅模式。
作为示例,这里构建一个日志系统,由两部分组成,一个是发送日志消息,另一个是接收和打印。
**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');
```
...
发布日期:
2018-11-13
分类:
其他
浏览量:
3503
阅读全文
我这里说的日志是应用日志,比如Web api 出现的一些异常,错误信息等,收集到一起,方便查询检索。
基本架构是,应用把出现的异常错误信息发送到MQ,再存储到数据库,然后提供一个web前端可以查看和检索。
ELK的主要组件如下:
- elasticsearch:存储数据的地方
- kibana:可视化数据的web前端
- logstash:数据中转的地方,可以收集数据,过滤转换之后存储起来,输入和输出都可配置,默认是elasticsearch,也可以是其他数据库。
- beats:这个是收集特定数据的一组轻量级工具,可以单独安装用来收集特定数据,比如nginx的日志,系统日志,或者是系统监控信息等,这组工具的信息可以直接写入到`elasticsearch`,也可以通过`logstash`写入。和上面三个工具集成度很高,只需要很少的配置就可以完成收集安装。
这里我只是收集应用日志,所以暂时不需要用到`beats`。
数据流向图:
:
**producer.php**
```php
...
发布日期:
2018-11-04
分类:
其他
浏览量:
3726
阅读全文
官网下载二进制包,或者用对应系统的仓库安装就可以了。
安装好后默认服务是启动的,可以使用下列命令查看状态:
`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...
发布日期:
2018-11-04
分类:
其他
浏览量:
4158
阅读全文
首先有一个完全不需要配置的现成方案,直接用`docker run`运行就可以使用了,项目地址:[https://github.com/jae-jae/docker-pan](https://github.com/jae-jae/docker-pan)。
这个方案利用的是`Aria2`的`web ui`来实现下载管理,`Filerun`来实现文件的管理的,下载后端是`Aria2`这个开源的下载软件。
本篇文章要讲的是在`NextCloud`里面添加离线下载的功能,就类似于百度网盘的离线下载一样的。
我的`nextcloud`是用`docker`运行的,不用`docker`运行的话也是类似的。
首先是在`nextcloud`的管理后台安装应用`ocdownloader`。
作者的`github`项目主页是:[https://github.com/e-alfred/ocdownloader](https://github.com/e-alfred/ocdownloader)
这个应用的下载后端可以是`curl`和`Aria2`,这里不管`c...
发布日期:
2018-03-05
分类:
其他
浏览量:
13344
阅读全文
什么是JWT?JWT全称是JSON Web Token,这是一个开放的RFC7519标准,它定义了在两者之间使用JSON安全传输数据的准则。传输的数据是可信的,并且是可验证的,因为数据已经添加了数字签名。签名可以用密钥或者是RSA密钥对签名。有什么特性呢?体积比较小,可以作为URL,POST数据等的参数,也可以放在HTTP头里面传输。另一方面,小意味着传输比较快。里面包含的信息都是可以直接拿来用的,避免了去数据库查询。什么时候应该使用JWT?典型场景:身份验证:这个是JWT最常用的场景了。一旦用户登录,之后的请求都需要带上JWT信息,验证通过之后才能访问授权的资源。比如单点登录,手机APP接口等。信息交换:因为JWT的数据是签名之后的数据,这样可以保证安全。JWT的数据结构由三部分组成,每一个部分是用点(.)分割的:Header(头);Payload(数据);Signature(签名)。所以,典型的JWT数据格式看起来像这样:xxxxx.yyyyy.zzzzz;Header头部包含两部分,token的类型,固定的JWT;哈希的算法,比如HMAC SHA256或者RSA。一般hash25...
发布日期:
2017-07-29
分类:
其他
浏览量:
4538
阅读全文