RabbitMQ简易教程 - RPC
在教程第二篇里面我们学习了如何实现一个任务队列,异步方式去处理那些比较耗时的任务。 但是如果我们需要调用一个远程主机上面的方法,并且等待它的执行结果呢? 这种模式我们通常将它称为远程方法调用(RPC)。
这一篇我们将利用RabbitMQ来构建一个RPC服务,服务器上面有一个可返回斐波拉契数的函数。 客户端通过rpc调用来获取结果。
在教程第二篇里面我们学习了如何实现一个任务队列,异步方式去处理那些比较耗时的任务。 但是如果我们需要调用一个远程主机上面的方法,并且等待它的执行结果呢? 这种模式我们通常将它称为远程方法调用(RPC)。
这一篇我们将利用RabbitMQ来构建一个RPC服务,服务器上面有一个可返回斐波拉契数的函数。 客户端通过rpc调用来获取结果。
前面一篇通过使用direct类型的交换机代替fanout广播类型交换机,
实现了一个基于日志级别路由对应的消息的功能。
但是还是有它的局限性——它并不能根据多个条件来实现路由,只能通过完全匹配routing key,
灵活性不够。
比如我想实现仅仅对于那些error级别日志并且由kern生成的日志才记录到文件中。
前面一篇实现了一个非常基础的日志系统,交换机将所有接收到的消息广播到它所知道的多个接受者。
这一节我们更进一步,实现订阅部分消息的功能。比如我只讲那些ERROR级别的消息写入日志文件, 同时将所有日志打印到控制台上面。
前面一篇介绍的任务队列是每个消息只能被一个工作者取走。这一篇讲解发布/订阅消息模式, 在这个模式里面,一个消息可以被发送给多个消费者。
这里我通过一个简单的日志系统来说明,消息生产者会将日志发送给队列,然后多个订阅者可以接收到这条日志显示到不同的地方, 比如可以打印到文件中,同时打印到控制台上面。
这里演示的官网通过python使用消息队列的教程:https://www.rabbitmq.com/getstarted.html
先演示最简单的一个入门级别的hello world例子,
发送者发送一个字符串,接受者接收到消息后打印出来。然后再介绍怎样实现任务队列
最近又开始捣鼓RabbitMQ了,一个超好用的队列中间件,官网教程更新,自己也将有用的东东记录下来。
测试环境:消息服务器CentOS7.4、客户端Python3.6.1
RabbitMQ是一个出色的消息代理中间件(Message Broker):接受和转发消息。你可以将它看作是一个邮局, 你把自己的信件写上收件人地址,然后放到邮筒里面就不用管了,由邮局负责将这个信件送到目的地。
ngrok是一个反向代理,它能够让你本地的web服务或tcp服务通过公共的端口和外部建立一个安全的通道, 使得外网可以访问本地的计算机服务。也就是说,我们提供的服务(比如web站点)无需搭建在外部服务器, 只要通过ngrok把站点映射出去,别人即可直接访问到我们的服务。
有做过微信公众号开发的人,对它应该不陌生。因为用户跟微信公众号产生的交互行为,微信会把用户的相关信息推送到我们自己的服务器, 如果服务在本地,那微信当然无法推送给我们,这使得开发功能的时候调试相当麻烦。我们可以使用ngrok把本地站点映射出去,解决这个问题。
另外如果我们想把本地开发时候的系统临时给外网用户看,无需部署到服务器上面去就可以,非常方便。
ngrok是开源的,官网地址:https://github.com/inconshreveable/ngrok
下面,我们开始搭建ngrok服务。操作系统为CentOS 7.2
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS的优点:
当然凡事都有两面性,HTTPS的缺点也很明显,就是处理速度会比HTTP慢,另外网站的CA证书申请一般都需要一笔费用。
在Java 7发布的新的IO框架中,除了大家都熟知的 FileVisitor 接口外,还有个 WatchService 接口经常被人忽视掉。
这个类可以让你实时的监控操作系统中文件的变化,包括创建、更新和删除事件。
WatchService 用来观察被注册了的对象的变化和事件。它和Watchable两个接口的配合使用,
WatchService类似于在观察者模式中的观察者,Watchable类似域观察者模式中的被观察者。
而Java 7中的java.nio.file.Path类就实现了Watchable接口,这样的话,和Path类一起可实现观察者模式。
私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。 有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库; 否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。 如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。 正常做法是在本地架设一个本地Maven仓库服务器,利用Nexus私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。