OneFeed的通知推送功能

2016 Dec 14

实现了push notification功能。 现在当OneFeed上有新评论的时候,我的手机会收到通知。

手机通知推送

下面是简单的构架图,

通知推送的架构

生成新评论的时候,Rails app会触发一个job向RabbitMQ发送消息。 一个sneakers worker会处理RabbitMQ中的消息,然后调用Slack API向Slack发送消息。 Slack会帮忙把消息push到我的手机上。

用到的工具

RabbitMQ的ruby client用的是bunny。 Rails job用bunny来发送消息。 RabbitMQ的consumer用的是Sneakers。 通过Slack bot来向Slack发送消息。Slack的ruby client用的是slack-ruby-client

Trim String If It is a Key

2016 Oct 13

如果字符串的用途是某种类型的key,那么字符串最好要trim一下,去掉首尾的空格。

曾经遇到一个bug,RabbitMQ中一个queue始终收不到routing key为某些值的message, 但是却能收到routing key为另一个值的message。 Queue的binding是通过配置文件指定的,

<routingKey value="routing-key.a.*, routing-key.b.*, routing-key.c.*">

Routing key为routing-key.b.*routing-key.c.*的消息始终收不到。 尝试直接通过“RabbitMQ Management”(http://localhost:15672/)发送消息,总是得到 “Message published, but not routed.”错误。

最后发现root cause是binding创建的时候是通过value.split(',')来提取routing key的。 因为没有trim所以 routing-key.b.*的开头有个空格。 但是sender在publish message的时候用的routing key总是不带空格的😱。

数据库的index也可以认为是一种key。 假设Customer表有一个email column,且email column是有index的。 那么在存数据或者查询时应该先trim一下email。

AMQP 0-9-1 Model Explained

2016 Oct 13

非常非常好的一篇文章,可以帮助理解RabbitMQ或者AMQP。