【发布时间】:2018-01-19 11:22:51
【问题描述】:
我们想开发一个基于微服务架构的应用程序。 为了在各种服务之间进行异步通信,我们计划使用消息队列(如 RabbitMQ、ActiveMQ、JMS 等)。除了消息队列还有其他方法可以实现进程间通信吗?
谢谢。
【问题讨论】:
标签: rabbitmq jms activemq message-queue microservices
我们想开发一个基于微服务架构的应用程序。 为了在各种服务之间进行异步通信,我们计划使用消息队列(如 RabbitMQ、ActiveMQ、JMS 等)。除了消息队列还有其他方法可以实现进程间通信吗?
谢谢。
【问题讨论】:
标签: rabbitmq jms activemq message-queue microservices
您应该使用队列来处理不需要实时完成的任务。
将任务添加到队列中,当有房间时,处理器将从队列中获取任务并处理并从队列中移除。
示例:
假设您的应用程序处理图像,用户上传了这么多图像。上传队列中的任务以压缩图像。当处理器空闲时,它会压缩排队的图像。
当您想写入系统的某种日志时,将其交给队列,一个进程将从队列中获取日志并将其写入磁盘。所以主进程不会在 I/O 操作上浪费时间。
建议:
如果您想要实时响应,则不应使用队列。您需要不断地 ping 队列以读取传入的消息,这是不好的做法。并且不能保证队列会立即处理您的任务。
所以解决方案是:
Redis 缓存 - 您可以将消息放入缓存中,其他进程将读取该消息。 Redis 是“内存中的数据结构”。它非常快速且易于使用。互联网上有太多的图书馆和好的资源,因为它是开源的。 Read more about Redis. 但是这里你还需要继续检查是否有某种消息可用,如果可用,则从中读取,处理并给出响应。但是从 Redis 中读取并不是很昂贵。有了redis,你就不用担心内存管理了,开源社区管理的很好。
使用套接字。套接字要快得多,你可以使这个轻量级(如果你愿意),因为它是基于事件的。一个进程将在端口上 ping,其他进程将侦听并给出响应。但是你需要管理内存。如果缓冲内存已满,则不能在此处放置更多消息。如果有这么多用户生成消息,您需要管理要回复的对象。
所以这取决于您的要求,例如您想经常阅读消息吗?您是要进行一对一通信还是多对一通信?
【讨论】: