当前位置: 首页 > 知识库问答 >
问题:

我们可以使用Web套接字在微服务之间进行通信吗?

颜志学
2023-03-14

我们有一个用例,其中我们有两个微服务,Microservice A将一个长期运行的任务推送到Microservice B

Microservice B开始处理任务并不断更新任务状态。现在Microservice A必须不断轮询Microservice B以获取任务状态的更新。

我们当前的设置中没有队列。

所以,我们想到在Microservice AMicroservice B之间创建一个Web套接字,以便Microservice B可以将状态更新推送到Microservice A。这种设计会违反Web套接字的任何原则吗?与恒定轮询相比,它会是一种更好的方法吗?

共有3个答案

栾鸣
2023-03-14

ApachePulsar能够充当消息代理,并且有一个WS-interface,用于向主题发送消息和监听主题。我自己还没试过。。。但我将测试使用它在不同类型的微服务中发送和监听事件。Pulsar本身是可伸缩的,允许持久的消息传递,例如可以在Kubernetes上安装和执行。但我只是读到了。。。现在我必须亲自尝试:)。

沈宏朗
2023-03-14

如果您想走这条路线——我建议更好的方法是转移焦点,这样您就有了一个中央websockets“服务器”,并且您的微服务可以直接相互连接到该服务器。那么您实际上是在复制其他架构如何做到这一点,无论是RabbitMQ还是Kafka等

白智
2023-03-14

最推荐的选项是添加一个队列:

  • 这将减少微服务A和微服务B之间的耦合
  • 这将允许对任务状态/结果感兴趣的微服务C知道它,而不需要对微服务B进行任何更改

如果你仍然选择websocket,你必须考虑可伸缩性(如果你有两个MicroserviceB实例,调用哪一个)、失败(如果一个服务失败,谁重新运行套接字……)的情况,还有其他一些。这就是为什么它不是在微服务环境中进行异步调用的最佳选择。

 类似资料:
  • 问题内容: 更具体地说,如果计算机上有服务器(实例),我可以使用C#实例连接到该服务器吗? 问题答案: 主要问题是您需要非常小心发送和接收的数据的编码。这是一对可以协同工作的程序。C#客户端发送字符串,方法是首先发送其长度为整数,然后发送字符串本身的字节。Java服务器读取长度,然后读取消息并将输出打印到控制台。然后编写回显消息,计算其长度,提取字节并将其发送回C#客户端。客户端读取长度,消息并打

  • 我有2个Docker容器:App 应用程序-包含php应用程序代码的简单容器。它仅用于存储代码并将代码传递到远程Docker主机。 应用映像Dockerfile: Web服务容器,由PHP-FPM Nginx组成。 Web image Dockerfile: 我的问题:是否可以通过套接字链接Web容器和App容器? 主要原因是使用应用程序容器将更新的代码部署到远程Docker主机。使用卷/命名卷在

  • 问题内容: 我的项目结构如下 我试图像这样从模块(即默认模块)导入, 但事实证明。但是我可以在内部实现相同的功能。请注意,我正在同时运行和文件。 问题答案: 部署后,GAE服务/模块不会在其模块目录(文件所在的目录)之外共享 任何内容。 因此,在dir(存在的地方)上方看不到任何东西,因此看不到。但是可以,因为模型位于其目录(存在)中。 如果需要,可以在内部进行符号链接,请参阅在App Engin

  • 问题内容: 我想在Unix套接字上使用node-ipc在NodeJS和C程序之间进行通信,根据该主页,这是最快的选择。(它们将在同一台计算机上)。该软件包声称它可以与C程序通信。(我必须进行健全性检查)。 问题在于示例没有提供示例C代码,而且我几乎不知道如何让他们交谈。 谁能指出我一个C代码示例以匹配那些客户机/服务器示例?例如,我将如何改编本教程以在C中使用unix管道(假设我还没有完全脱离轨道

  • 我的项目中有普通的jdbc连接池,并使用ejb进行事务处理。现在我想将事务管理更改为Spring事务管理,但我不想为此创建单独的数据源,我想使用相同的普通连接池。 有可能吗? 下面是我的Springbean for transaction(数据源是空的,因为我不知道如何从普通的jdbc连接池进行设置)

  • 我目前正在做一个Spring Boot微服务项目。我已经创建了服务,每个服务都是单独运行的。有了这个,我需要一些服务来与其他服务进行通信。我怎样才能做到这一点? 我看到了一些关于这一点的博客,它们使用Netflix、Eureka云服务器来实现这一点。有没有什么方法可以在本地环境中实现这一点,而不使用云服务器?