世界上最伟大的投资就是投资自己的教育
Rails 项目搭建 rabbitmq 消息中间件 实现微服务架构
背景
起步
首先 安装 rabbitmq 到本机
Mac 下 执行
brew install rabbitmq
启动
rabbitmq-server
默认可以访问http://localhost:15672/#/ web 服务界面 会有默认的用户名 guest 和密码 guest
如果想要使用其他用户 可以创建和修改并赋予权限
在本地项目启动 redis-server 启动 sidekiq 这里 sidekiq 只是作为队列使用 有大量消息时 使用队列发送到 mq
在生产消息的项目中安装 gem bunny 他是一个生产者可以帮你使用 mq 并创建信道和发送消息
在需要消费的项目中安装 sneaker 他是一个消费者 可以接收
rabbitmq 的消费队列和 exchange 对应关系需在 web 上手动操作
也可以在创建消费队列的时候配置
from_queue 'q.message.service.user_message.create',
durable: true,
exchange: 'ex.message_service.user_message',
exchange_type: 'topic',
routing_key: 'message.create'
这里配置好队列于 exchange 的关系
关于 bunny 和 sneakers 的使用这里有教程
配置
rabbitmq:
amqp: 'amqp://staging:rabbitdev@localhost:5672' # 用户名:密码@本地的服务地址
vhost: 'msgbus.staging.yiqiyin.com' # vhost 虚拟主机名称
timeout_job_after: 180 # 3.minutes 超时时间
daemonize: true # 守护进程
Sneakers worker 有修改的话每次都要重新启动一次 sneakers 服务
项目下 执行
rake sneakers:run
总结
首先消息队列和中间件可以将很多不需要及时同步的操作在队列中执行,降低服务器等待时间和负载,并且微服务的模块保证自己模块做更简单的事情解耦,并且可以给对应的站点添加还是不添加此功能提供了很多的可选择性,比如注册成功邮件,激活邮箱邮件,发放优惠券等操作,
同时又要注意不要为了微服务而做微服务,还要考虑这样的架构如果在某一步消息丢失了或者执行失败了如何处理,sneakers 有对应的异常处理机制,比如说有消息一直消费失败在重试一定次数后可以选择丢入 dieline,等待后续查看失败原因等等。
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top