如何配置 Apache Camel 的 serviceCall 在 Eureka 服务发现中查找服务?

How to configure Apache Camel's serviceCall to look for services in Eureka service discovery?

我正在做一个项目,我被迫不使用 Spring Boot。我在 localhost:8090 上有一个 Eureka 服务器 运行,并且已经在上面注册了一些服务。 如何强制 Apache Camel 的 serviceCall 在 Eureka 服务器上寻找服务? 我知道要使其作为服务发现对 Consul 起作用,您应该执行以下操作:

ConsulConfiguration config = new ConsulConfiguration();
config.setUrl("http://ip:port");
ConsulServiceDiscovery discovery = new ConsulServiceDiscovery(config);
// configure camel service call
ServiceCallConfigurationDefinition config = new ServiceCallConfigurationDefinition();
//config.setServiceDiscovery(servers);
// register configuration
camelContext.setServiceCallConfiguration(config);

如何让它在 localhost:8090 上用于 Eureka 服务器??

camel 中没有对 eureka 的直接支持,所以如果你不能使用 spring-boot,你需要构建自己的 ServiceDiscovery 实现

正如@Luca 所建议的那样,经过一些研究,我得出了这个结论,即您应该实施自定义服务发现以从 Eureka 读取数据。为此,我执行了以下操作:

  1. camel-core 模块的 DefaultServiceDiscovery class 扩展我的 EurekaServiceDiscovery class
  2. 覆盖方法public List getServices(String name) DefaultServiceDiscovery class 负责从 Eureka 检索服务
  3. 使用Eureka REST API获取覆盖方法中的所有服务。为了做到这一点,您应该将收到的 JSON 数据从 Eureka REST API 转换为适当的 java classes。您需要根据这些 JSON 数据定义 ApplicationInstanceInfo classes。

例如运行Eureka在localhost:8090上注册一个名为account-service的服务后,可以git账户信息- 通过向 localhost:8090/eureka/apps/account-service

发送 Http.GET 请求来提供服务

有关详细信息,请查看此 Github 存储库:https://github.com/hamedmirzaei/service-gateway-bootless