问题标签 [microservices]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3516 浏览

spring-data-rest - 如何在基于 Spring Data REST / Spring HATEOAS 的(微)服务之间建立关系?

在使用基于 Spring Data Rest 或 HATEOAS 的基于超媒体的微服务时,试图找出如何处理关系的模式。

如果您有服务 A(讲师)和服务 B(课程),每个都作为独立的应用程序存在。

在两个服务之间建立关系的首选方法是什么。以一种不需要外部服务 ID 列的方式。每个服务都可能有许多其他服务需要在同一个庄园中进行通信。

可能的解决方案(不确定路径是否正确)

每个服务都有一个带有 OneToMany 的第二个表,其中包含服务中的主要实体。该表将具有以下字段:

ID、entityID、rel、relatedID

然后在使用 Spring Data Rest 的相反服务中设置一个 find 查询连接表以查找匹配的记录。

我想要实现的主要目标是任何服务都可以与任意数量的其他服务建立关系,而无需了解其他服务。

0 投票
1 回答
426 浏览

web-services - 用于服务器到服务器通信的 Oauth2 授权

我在一个微服务架构中工作,它有自己的 oauth2 提供程序以允许服务交互。

我需要开发一项服务,该服务被授予访问用户资源的权限,以便对用户帐户执行内部任务。由于需要访问用户资源的服务是内部服务,因此要求用户允许访问他们自己的资源不是一个可行的解决方案。

我担心选择正确的授权来执行此任务,因为这client_credentials似乎是正确的,它似乎也被用来只允许只更新服务数据,而不是访问用户资源。我认为的另一个解决方案是在用户注册时自动提供授权码,就好像用户点击了“允许”按钮一样,然后使用该code授权执行请求。这里的缺点是每次创建具有该需求的服务时我都必须创建新的授权码,但这似乎是一个更清晰的解决方案(因为用户 XXX 的授权码只允许访问用户 XXX 的资源)。

我也理解实现是不同的,因为标准提供了很大的灵活性,但是在您看来,哪一个是合适的解决方案?你会怎么处理?更清楚地说,“统计服务”是允许访问所有用户的资源还是“统计服务”是所有用户都可以访问他们的资源?

0 投票
3 回答
534 浏览

ruby-on-rails - 如何更改这些生产者-消费者微服务以允许并行处理?

我有几个微服务(用 ruby​​ 实现,尽管我怀疑这对我的问题很重要)。其中一个提供项目,另一个处理它们,然后将它们标记为已处理(通过 DELETE 调用)

提供者有一个/items端点,它以 JSON 格式列出了一堆用 id 标识的项目。它还有一个DELETE /items/id端点,可以从列表中删除一项(可能是因为它已被处理)

“处理器”中的代码(非常简化)如下所示:

这有几个问题,但我想解决的一个问题是它不是线程安全的,因此我不能并行运行它。如果两个工人同时开始处理项目,他们将“踩到对方的脚趾”:他们将获得相同的项目列表,然后(尝试)处理并删除每个项目两次。

我可以更改此设置以允许并行处理的最简单方法是什么?

你可以假设我有 ruby​​ 可用。我宁愿将更改保持在最低限度,并且如果可能的话,宁愿不安装其他 gem。Sidekiq可用作消费者的排队系统。

0 投票
1 回答
1687 浏览

redirect - 在 docker 容器之间重定向的最佳实践

鉴于我在 docker 容器中运行了多个 Web 应用程序,我希望能够让用户在其浏览器中从服务重定向到另一个服务。我想知道如何实现这一点 - 特别是如果我希望我的应用程序可以从一个 docker 主机移植到另一台主机。

假设我们有一个将用户重定向到 ServiceB 的 ServiceA。所以我们有关系

ServiceA --> ServiceB

一种方法是静态分配端口和主机名,并将它们设置为我的 Web 服务的环境变量——我不喜欢这样,因为我不想关心哪个服务在哪个端口上运行。

第二种方法是使用像 nginx 这样的代理并链接服务并使用代理主机和端口。但这需要在将服务移动到其他主机时更改代理配置。

想到的第三种方法是使用 etcd 和大使来注册和解析服务。所以 ServiceA 会使用一个 ServiceB-Ambassador 在 etcd 中查找 ServiceB。这导致许多 docker 容器只是为了连接服务之间。

你更喜欢哪种方式?还是有不同的方法?

编辑

真正的问题是将 ServiceB 的 uri 注入到 ServiceA 中,所以我可以使用类似的参数启动我的 ServiceA -DserviceB.uri=<serviceUri>,以便 serviceA 可以构建正确的重定向标头。

0 投票
6 回答
13766 浏览

java - 父 pom 和微服务

  • 我们有几个项目是微服务,每个项目都是独立的(在单独的 Spring Boot 服务器上运行,暴露其余服务,使用单独的 DB 模式......)
  • 我们使用 maven 来管理依赖关系。

让父 pom 将每个微服务声明为模块是个好主意吗?因此有助于管理公共依赖项(例如每个项目中都使用 lib servlet-api 女巫,将其从所有项目中删除并仅在父 pom 中声明)

0 投票
2 回答
5442 浏览

php - 我的概念是否遵循微服务架构?

我在 Martin Fowler 的页面上阅读了关于微服务的文章,发现它非常有趣。现在我计划构建一个电子商务 Web 应用程序作为概念验证,我想知道我的概念是否被认为是微服务架构。

该架构由 3 个组件组成:

  • 一个基于 javascript 的单页应用程序,它将 AJAX 请求发送到
  • 带有 REST API 的服务器,它提供通过调用其他服务接收到的 JSON 数据(我认为您将此行为称为 API 网关)
  • 3 种服务:CatalogProvider、CustomersProvider、CheckoutProvider

目前,这些服务都是 Magento (PHP) Shopsystem 的 API 端点。将来我计划将提供程序与其他系统交换。

所以我的问题是:

  • MS 被认为是“可独立部署的”。我知道在 JAVA 世界中,我们谈论的是一个 JAR 或 WAR 文件,但是 PHP 服务如何“独立部署”?

  • 我的概念是否不遵循 MS 架构的原则,因为提供者都是一个大型(Magento)系统的一部分?

感谢您的阅读。我很高兴有任何建议。

0 投票
1 回答
1014 浏览

git - 如何为微服务构建精简的开发环境

我在考虑微服务架构,想知道人们是否有开发环境的最佳实践。

我的工作假设是每个微服务都将存在于它自己的 git 存储库中,以实现隔离和易于部署。我还假设每个开发人员都会创建他们正在处理的任何 repo 的分支。

我正在考虑的问题出现在您正在处理涉及多个微服务的问题时。例如,有一个缺陷会影响一个微服务以及它如何适当地使用另一个微服务。

假设 n 个项目涉及该缺陷,您将必须检查 n 个 git 存储库并将它们配置为一起工作。如果他们每个人都有一个 Vagratefile 和 Dockerfile,那么你最终会运行 n 个 VM。理想情况下,您只有 1 个 Vagrant VM,并且每个服务都只是同一 VM 中的一个新 Docker 实例。

带有 git 子模块的主仓库/项目可以工作。这样做的问题是,如果我们创建一个通用的主仓库/项目,那么子模块将指向上游而不是开发人员的分支。

我目前正在考虑一个具有一些配置、vagrant 和 fig 的主项目可能会成功。我目前正在考虑两种实现这种方法的方法。

  1. 提供具有一些默认值的配置,即 project_1 应位于 ../project_id 等
  2. 提供一个脚本,该脚本将根据用户的 github 帐户创建子模块,这将为用户的 fork 以及上游项目创建远程。

有没有其他人解决了这个问题或有一个好的工作流程?

0 投票
2 回答
392 浏览

configuration - 如何参数化 Cloud Foundry 服务实例?

我的问题可以简化为这种情况:我想要一个带有单个 REST 入口点的服务返回一些消息。因为它对我非常有用,所以我希望它的实例很少,但每个实例都返回我指定的不同消息。当然,这些服务实例中的每一个都将绑定到少数应用程序。所以我想知道如何完成这样的事情。

在我看来,做到这一点的最佳方法是在代理(http://docs.cloudfoundry.org/devguide/services/adding-a-service.html#create)的创建调用期间传递一些参数。但这样做是不可能的。您是否知道创建某些服务的多个实例的方法,这些实例与启动期间传递的某些参数不同?我想拥有完整的 CF 实例管理(如果它崩溃,它应该重新启动等)并且我想避免将它们创建为具有作为环境变量传递的不同参数的应用程序......

更新:不同消息(和实例)的数量可能非常大,并且它们的内容事先是未知的。这以某种方式取消了使用服务代理计划(每条消息一个计划)的资格。

0 投票
2 回答
3500 浏览

spring-boot - 具有 Spring 集成和 Spring Boot 的微服务

我对微服务(和 SI)有点陌生,想按照微服务架构风格制作 POC。我已经看到我可以使用 Spring Boot 进行部署并使用 SI 进行开发,但发现很少有关于如何组合它们的文档(只是 Spring Boot 主页中的一个示例)。你知道如何结合这两种技术的最佳实践或建议吗?

0 投票
0 回答
243 浏览

java - 具有联合功能的嵌入式 Java Amqp 代理

我想要与 amqp 消息通信的微服务。我想要一个本地队列,当与 RabbitMQ 服务器建立连接时,将本地队列中的所有消息发送/联合到服务器。

我查看了 Apache Qpid,但 Java Broker 还没有联合功能(有一个提案)。

是否有另一个可以工作的小型嵌入式 java amqp 代理?或者是否有其他一些 java 工具可以主动将消息从本地队列发送到远程服务器?