Rabbitmq 无消息队列的进程间(服务)通信

Rabbitmq 无消息队列的进程间(服务)通信,rabbitmq,jms,activemq,message-queue,microservices,Rabbitmq,Jms,Activemq,Message Queue,Microservices,我们希望开发一个基于微服务体系结构的应用程序。 为了在各种服务之间异步通信,我们计划使用消息队列(如RabbitMQ、ActiveMQ、JMS等)。除了消息队列之外,是否有其他方法可用于实现进程间通信 谢谢。您应该使用队列来处理不需要实时完成的任务 将任务追加到队列中,当有房间时,处理者将从队列中接收任务,并将从队列中处理和删除任务 示例: 假设您的应用程序处理图像,那么用户正在上载如此多的图像。上传队列中的任务以压缩图像。当处理器空闲时,它将压缩排队的图像 当您想要写入系统的某种日志时,将其

我们希望开发一个基于微服务体系结构的应用程序。 为了在各种服务之间异步通信,我们计划使用消息队列(如RabbitMQ、ActiveMQ、JMS等)。除了消息队列之外,是否有其他方法可用于实现进程间通信


谢谢。

您应该使用队列来处理不需要实时完成的任务

将任务追加到队列中,当有房间时,处理者将从队列中接收任务,并将从队列中处理和删除任务

示例:

  • 假设您的应用程序处理图像,那么用户正在上载如此多的图像。上传队列中的任务以压缩图像。当处理器空闲时,它将压缩排队的图像

  • 当您想要写入系统的某种日志时,将其提供给队列,一个进程将从队列中获取日志并将其写入磁盘。因此,主进程不会为I/O操作浪费时间

  • 建议:

    如果需要实时响应,则不应使用队列。你需要不断地对队列进行ping以读取收入,这是一种糟糕的做法。而且也不能保证队列会立即处理您的任务

    因此解决方案是:

  • Redis cache-您可以将邮件放入缓存,其他进程将读取该邮件。Redis是“内存数据结构”。它是非常快速和易于使用。互联网上有太多的图书馆和好的资源,因为它是开源的。但在这里,您还需要不断检查是否有某种消息可用,如果可用,则从中读取,处理并给出响应。但阅读Redis的文章并不贵多少。使用redis,您不需要担心内存管理,它由开源社区进行良好管理

  • 使用套接字。Socket的速度要快得多,您可以使它变得轻量级(如果您愿意),因为它是基于事件的。一个进程将ping端口,另一个进程将侦听并给出响应。但是你需要管理内存。如果缓冲内存已满,则不能在此处放置更多消息。如果有如此多的用户生成消息,您需要管理您想要回复的对象


  • 因此,这取决于您的需求,比如您想经常阅读消息吗?您想进行一对一通信还是多对一通信?

    谢谢Ujjaval。安装了各种传感器,这些传感器将定期发送数据(也基于事件或某人的请求)。我们希望获得数据并进行处理,持久化并进行操作。为了解决这个问题,我们需要一个更具可扩展性、效率更高、松散耦合的解决方案。你需要实时完成这个过程吗?使用套接字,您可以实时(传感器将在套接字上发出请求,另一方面进程将侦听、操作和完成请求),使用redis,您可以将数据放入缓存,并在需要时从缓存中提取数据并使用,因此提取将变得快速,并及时存储到数据库中。这两个东西都是可伸缩的。我可以使用缓存来存储FB,以便更快地访问,我可以使用套接字使进程异步,因此这取决于您是如何进行的。@Ujjaval Moradiya您能否详细说明“您应该使用队列来处理不太重要的任务(…)”这句话背后的原因。在我看来,队列比直接通信(如REST或基于套接字的通信)可靠得多。请记住,您也可以使用某些产品进行pub-sub,这样就不需要频繁地使用池。@LechMigdal的句子应该是“您应该使用队列来处理不需要实时完成的任务”。我写了两个最适合使用队列的示例。对于队列,应该只有一个使用者,否则您需要跟踪正在进行的任务。因此,在这种情况下,当一个任务需要时间时,无法保证即将到来的任务将实时交付,在这种情况下,队列将执行得更好。对于我来说,队列意味着你正在制作任务列表,在FIFO的基础上,任务将被竞争。很抱歉输入错误-“不能保证未来的任务将被实时交付,在这种情况下,你不应该使用队列”可能重复的