问一个关于 MQ 正确合理使用方式的问题

2016-11-29 15:29:07 +08:00
 waczx

目前使用的是 rabbitmq 作为队列服务,比如有系统 A 和 B ,目前使用方式是:
系统 A 先把消息放在自己的 redis 里面,然后每分钟起脚本,读取( lpop ) 300 条,调 B 系统的 curl 接口;
系统 B 的接口接到消息,放在自己的 MQ queue 里面,然后起脚本消费 MQ 消息处理

我倾向的方案:
按照之前的工作经验,系统 A 和系统 B 共连一个 MQ 地址,定义一个 vhost.exchange.queue_name , A 有消息就朝里面塞, B 可以定时取就可以了啊

求各位老司机的方案!

2427 次点击
所在节点    PHP
16 条回复
GOOD21
2016-11-29 15:47:32 +08:00
感觉就是一个异步队列模型啊, A 是 Producer , B 是 Consumer 。

直接 A 发送到 Broker ,然后 B 消费就好了。
waczx
2016-11-29 15:52:18 +08:00
@GOOD21 其实目的就是:异步通知 B 系统某个业务状态变化。。
waczx
2016-11-29 15:53:05 +08:00
@GOOD21 A 加一个 redis ,我个人觉得会拖垮正常的 redis 服务
odirus
2016-11-29 15:54:07 +08:00
楼主,本来就是这么做啊。。。
9hills
2016-11-29 15:54:35 +08:00
奇葩的使用方式。。
odirus
2016-11-29 15:55:03 +08:00
A 、 B 直连方案对你们来说有任何问题么?安全性 or 其他?
Ouyangan
2016-11-29 15:55:38 +08:00
没能理解楼主为什么要加一层 redis , 哈哈
GOOD21
2016-11-29 15:58:28 +08:00
@waczx 首先要确认一下是不是内网调用,如果是内网的,完全没必要,直接在 B 起一个 Consumer 的长连接就可以了。
waczx
2016-11-29 16:01:15 +08:00
@GOOD21 A 、 B 、 MQ 均是在外网,三个系统间均单独的外网 ip
waczx
2016-11-29 16:01:58 +08:00
@odirus 因为内部刚刚使用 MQ
imaxis
2016-11-29 16:05:26 +08:00
redis 放中间没啥用?
waczx
2016-11-29 16:11:01 +08:00
@imaxis 放中间只作为 push 和 pop ,没有其他作用,有作用的话:作为 A 的队列使用了
GOOD21
2016-11-29 16:17:15 +08:00
@waczx 外网调用 MQ 。。。这个还是比较猛烈的。。。带宽限制太多了。。。

因为不了解具体业务,从“异步通知 B 系统某个业务状态变化” 和 “ A 、 B 、 MQ 均是在外网,三个系统间均单独的外网 ip ” 来看,其实就是一个简单的 http 调用就好了, A 通过 http 请求 B , B 处理请求。至于 A 、 B 内部的处理逻辑,如果是内网的 MQ 可以用,外网的,就别用了吧。
waczx
2016-11-29 16:29:24 +08:00
@GOOD21 AB 直连的话,考虑到了外网:
1 、 MQ 连接超时,一个在国内,一个在国外
2 、带宽流量
GOOD21
2016-11-29 16:34:34 +08:00
@waczx 外网的话,你可以理解就是两个公司间的调用了。 MQ 理论上来说应该 A 的内部有一套, B 的内部有一套才是正常的套路。
deft00
2016-11-29 16:48:18 +08:00
redis 本身也支持发布订阅模式呀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/324111

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX