首页ruby

Rails 项目搭建 rabbitmq 消息中间件 实现微服务架构

Marin发布于64 次阅读

背景

起步

首先 安装 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,等待后续查看失败原因等等。

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
喜欢
友情提示
   官方 QQ 1 群 697272886(500/2000)
   官方 QQ 2 群 856141852

© Rails365 | 隐私条款 | 服务条款 | 粤ICP备15004902号 | 在线学员:20

Top