我们希望开发基于微服务架构的应用程序。 为了异步地在各种服务之间进行通信,我们计划使用消息队列(如RabbitMQ,ActiveMQ,JMS等)。除了消息队列之外是否有其他方法可用于实现进程间通信?
感谢。
答案 0 :(得分:1)
您应该使用队列来处理不需要实时完成的任务。
将任务附加到队列中,当有空间时,处理器将从队列中获取任务并处理&将从队列中删除。
示例:
假设您的应用处理图片,用户正在上传如此多的图片。上传队列中的任务以压缩图像。当处理器空闲时,它将压缩排队的图像。
- 醇>
如果要编写系统的某种日志,请将其提供给队列,一个进程将从队列中获取日志并将其写入磁盘。因此,主要流程不会浪费时间进行I / O操作。
建议:
如果您想要实时响应,则不应使用队列。你需要不断地对队列进行ping操作以阅读这些内容,这是不好的做法。并且无法保证队列会立即处理您的任务。
所以解决方案是:
Redis缓存 - 您可以将邮件放入缓存中,其他进程将读取该邮件。 Redis是“内存数据结构”。它非常快速且易于使用。互联网上的图书馆和资源太多,因为它是开源的。 Read more about Redis.但是在这里你还需要检查是否有某种可用的消息,如果有的话可以从中读取,处理并给出响应。但是从Redis那里读到,并不是非常昂贵。使用redis,您无需担心内存管理,它可以由开源社区管理。
- 醇>
使用套接字。套接字速度要快得多,你可以将它设置为轻量级(如果你想的话),因为它是基于事件的。一个进程将ping端口,其他进程将监听并给出响应。但是你需要管理记忆。如果缓冲的内存已满,则无法在此处添加更多消息。如果有这么多用户生成消息,您需要管理您想要响应的人。
所以这取决于你的要求,就像你想要不断阅读消息一样吗?,你想进行一对一的沟通或多对一的沟通吗?