【问题标题】:How to run 2 servers as separate processes?如何将 2 个服务器作为单独的进程运行?
【发布时间】:2019-01-24 16:41:57
【问题描述】:

我有 2 个服务,每个都有一个控制器。

@Service
public class Service1
{
}

@RestController
@RequestMapping("/api")
public class Controller1
{
}

...

@Service
public class Service2
{
}

@RestController
@RequestMapping("/api")
public class Controller2
{
}

我想在各自的进程中运行每个服务或控制器。在不创建两个应用的情况下如何做到这一点?

这与我想要的类似,见下图:

【问题讨论】:

  • 两个不同的微服务?
  • 是的,那将是完美的。只要他们继续跑,我就可以继续做休息电话。
  • 那你需要两个独立的应用程序,但我不明白问题出在哪里?你能澄清一下吗?
  • 我不想拥有两个应用程序。
  • @J_Strauton 澄清问题:在您看来,应用程序和进程之间有什么区别?

标签: java spring-boot microservices


【解决方案1】:

考虑到附加的组件图,我建议研究微服务架构。您将能够按域(电影、客户、评论)分离职责,甚至建立单独的访问规则(例如,电影目录的匿名访问和对客户数据的安全访问)。每个数据存储(DB1、DB2 等)将仅链接到负责的服务。此外,您将能够根据使用情况准确扩展必要的服务,例如5 种电影服务、2 种客户数据服务和 3 种评论服务。

Gradle 或 Maven 可以让您轻松构建包含多个子模块的大型项目。您的一些模块将是应用程序模块,其中一些将是共享模块(模型、实用程序等)。

此外,我建议为每个项目设置一个单独的 repo,以简化变更管理和审查 - 这将非常有帮助。

示例 Gradle 结构:

根模块

  • 型号
  • 实用工具
  • 电影服务
  • 客户服务
  • 审核服务

每个服务子模块都将包含自己的 @SpringBootApplication 以及控制器、服务和存储库。当然,您需要在每个服务子模块中添加 Spring Boot Gradle 插件。

更新: 展望未来,将 Docker 配置添加到每个服务子模块并将每个应用程序作为 Docker 容器运行是明智的。 Docker 将大大简化开发。

【讨论】:

  • gradle 如何帮助我将这些模块构建为单独的应用程序?由于一些奇怪的管理决定,我不能使用多个回购。如果我为每个服务创建一个模块,我该怎么做,以便在运行此代码时每个模块都成为自己的应用程序?
  • 帖子中添加了示例结构和一些解释。
【解决方案2】:

如果你能做这样的事情,那将是模棱两可的。 例如,当您调用 localhost:8080/app -> 哪个控制器应该响应?也许您需要实现一个调度程序,其中包含一些应该调用哪些控制器的标准。我不明白这种分离有什么好处。您可以将您的应用划分为库并将它们添加为依赖项。

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多