如何在代理API中使用camel consul组件?

时间:2017-02-14 08:36:14

标签: apache-camel consul

根据 consul (camel.apache.org/consul-component.html)的camel文档,支持的HTTP API是kv,event和agent。有kv(键/值存储)的例子,它们工作正常,但代理API没有这样的例子。我通过了Consul的文档[www.consul.io/docs/agent/http/agent.html]以及相应的java客户端[github.com/OrbitzWorldwide/consul-client],并试图弄清楚如何领事:代理组件应该工作,但我发现没有什么简单。

main.getCamelTemplate().sendBodyAndHeader(
            "consul:agent?url=http://localhost:8500/v1/agent/service/register", 
            payload,
            ConsulConstants.CONSUL_ACTION, ConsulAgentActions.AGENT); //also tried with ConsulAgentActions.SERVICES, but no luck

我还检查了https://github.com/apache/camel/tree/master/components/camel-consul/src/test/java/org/apache/camel/component/consul提到的测试用例但无法找到与代理api相关的任何内容。

所以我的问题是如何使用consul:agent组件。

更新:我尝试了以下代码并能够获得服务。

Object res = main.getCamelTemplate().requestBodyAndHeader("consul:agent", "", ConsulConstants.CONSUL_ACTION, ConsulAgentActions.SERVICES);

似乎consul组件仅适用于HTTP代理API的GET操作。但在这种情况下,如何使用consul组件注册新服务(如/ v1 / agent / service / register:注册新的本地服务)?

2 个答案:

答案 0 :(得分:0)

此代码适用于我:

ImmutableService service =
        ImmutableService.builder()
                .id("service-1")
                .service("service")
                .addTags("camel", "service-call")
                .address("127.0.0.1")
                .port(9011)
                .build();

ImmutableCatalogRegistration registration =
        ImmutableCatalogRegistration.builder()
                .datacenter("dc1")
                .node("node1")
                .address("127.0.0.1")
                .service(service)
                .build();

ProducerTemplate template = main.getCamelTemplate();
Object res = template.requestBodyAndHeader("consul:catalog", registration, ConsulConstants.CONSUL_ACTION, ConsulCatalogActions.REGISTER);

但它看起来有点不合适(如解决方法),我认为还有其他解决方案。

答案 1 :(得分:0)

可以使用

.to("consul:agent?action=SERVICES")

Map<String, Service> 的形式检索已注册的服务,并将服务 ID 作为映射键。

.to("consul:catalog?action=REGISTER") 

写注册,期望一个 ImmutableCatalogRegistration 作为正文

请注意,您可以使用 CamelServiceRegistrationRoutePolicy 将 Camel 路由注册为服务 automatically