2017-02-14 12 views
1

Согласно документации на верблюд для consul (camel.apache.org/consul-component.html), поддерживаемый HTTP-API - это kv, event и agent. Есть пример kv (хранилище ключей/значений), которые работают нормально, но нет такого примера для API-агента. Я прошел через документацию Консула [www.consul.io/docs/agent/http/agent.html] и соответствующего java-клиента [github.com/OrbitzWorldwide/consulclient] и попытался выяснить, как консул: компонент агента должен работать, но я не нашел там ничего простого.Как использовать компонент консула верблюда для API-интерфейса агента?

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 агента.

Так что мой вопрос в том, как использовать консул: компонент агента.

ОБНОВЛЕНИЕ: Я попробовал приведенный ниже код и смог получить услуги.

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

Похоже, что компонент consul работает только для операции GET API-интерфейса HTTP. Но в таком случае, как зарегистрировать новую услугу (например,/v1/agent/service/register: регистрирует новую локальную службу) с компонентом consul?

ответ

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); 

Но это выглядит некрасиво некоторые (как обходной путь), и я думаю, что есть и другие решения.