如何在Ruby中编写微服务?

【编者按】本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面。系国内 ITOM 管理平台 OneAPM 编译呈现。

最近,大家都认为应当采用微服务架构。但是,又有多少相关教程呢?我们来看看这篇关于用Ruby编写微服务的文章吧。

人人都在讨论微服务,但我至今也没见过几篇有关用Ruby编写微服务的、像样的教程。这可能是因为许多Ruby开发人员仍然最喜欢Rails架构(这没什么不好,Rails本身也没什么不好,但是Ruby可以做到的事还有很多呢。)

所以,我想出一份力。让我们先来看看如何在Ruby中编写和部署微服务。

想象一下这个场景:我们需要编写一个微服务,其职责是发邮件。它收到的信息如下:

  {  
  'provider': 'mandrill',  
  'template': 'invoice',  
  'from': 'support@company.com',  
  'to': 'user@example.com',  
  'replacements': {    
  'salutation': 'Jack',    
  'year': '2016'
  }
}

它的任务是替换掉模板中的某些变量,然后把发票邮件发送至user@example.com。(我们用mandrill作为邮件API的供应商,令人忧伤的是,mandrill即将要停止服务了。)

这个例子非常适合使用微服务,因为它很小,而且只关注某个功能点,接口也定义得很清晰。因此,当我们在工作中决定要重写邮件基础结构时,我们就会这样做。

如果我们有一个微服务,我们需要找到一个方法,向它发送一些信息。也就是传递消息队列的方法。有许许多多可选的消息系统,你可以随便选择一个自己喜欢的。我们这里选取的是RabbitMQ,因为:

  • 它很普及,而且是按照标准(AMQP)来编码的。

  • 它已与多种语言绑定,因此非常适合多语言环境。我喜欢用Ruby来编写应用(也觉得它比其他的语言更好),但我并不认为目前Ruby适用于所有的问题,也不认为将来会是这样。因此,我们也有可能需要用Elixir编写一个发送邮件的应用(写起来也不会很困难)。

  • 它非常灵活,可以适应各种工作流 – 可以适应简单的在后台处理消息队列的工作流(这是本文的重点讨论对象),也可以适应复杂的消息交换工作流(甚至是RPC)。网站上有许多的例子。

  • 通过浏览器即可访问它的管理员面板,这面板非常有用。

  • 它拥有有许多托管解决方案(你可以在你最喜欢的包管理器中找资源,从而进行开发)。

  • 它是用Erlang编写的,Erlang的程序员们很好地处理了并发问题。

RabbitMQ 把消息放入队列中非常简单,就像下面这样:

require 'bunny'
require 'json'

connection = Bunny.new
connection.start
channel = connection.create_channel
queue = channel.queue 'mails', durable: true

json = { ... }.to_json
queue.publish json
connection.close

bunny是RabbitMQ的标准gem,当我们不传任何项给Bunny.new时,它会假设RabbitMQ有标准的证书,是在localhost:5672

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值