orbitz.consul 入门例子
maven 引入
<dependencies>
<!-- consul-client -->
<dependency>
<groupId>com.orbitz.consul</groupId>
<artifactId>consul-client</artifactId>
<version>0.10.0</version>
</dependency>
<!-- consul's dependency-->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.22.2</version>
</dependency>
</dependencies>
入门例子
package org.example;
import com.google.common.base.Optional;
import com.google.common.net.HostAndPort;
import com.orbitz.consul.Consul;
import com.orbitz.consul.KeyValueClient;
import com.orbitz.consul.model.kv.Value;
public class ConsulExample {
public static void main(String[] args) {
// 指定Consul服务地址和端口
String consulHost = "localhost";
int consulPort = 8500;
// 创建Consul客户端
Consul consul = Consul.builder()
.withHostAndPort(HostAndPort.fromParts(consulHost, consulPort))
.build();
// 进行其他操作...
// 创建KeyValueClient
KeyValueClient keyValueClient = consul.keyValueClient();
// 执行增删改查操作
putKeyValue(keyValueClient, "myKey", "myValue");
getValue(keyValueClient, "myKey");
deleteKey(keyValueClient, "myKey");
}
// 添加键值对
private static void putKeyValue(KeyValueClient keyValueClient, String key, String value) {
keyValueClient.putValue(key, value);
System.out.println("Key-Value pair added: " + key + " = " + value);
}
// 获取键值对
private static void getValue(KeyValueClient keyValueClient, String key) {
Optional<Value> value = keyValueClient.getValue(key);
if (value.isPresent()) {
System.out.println("Value for key " + key + ": " + value.get().getValueAsString());
} else {
System.out.println("Key not found: " + key);
}
}
// 删除键
private static void deleteKey(KeyValueClient keyValueClient, String key) {
keyValueClient.deleteKey(key);
System.out.println("Key deleted: " + key);
}
}
如果最后不执行删除,可以在 consul 控台上看到我们添加的元素。
测试日志:
Key-Value pair added: myKey = myValue
Value for key myKey: Optional.of(myValue)
Key deleted: myKey
Ecwid/consul-api
说明
尝试了一下 github,这个应该作为入门的例子。
maven 引入
<dependency>
<groupId>com.ecwid.consul</groupId>
<artifactId>consul-api</artifactId>
<version>1.4.5</version>
</dependency>
例子
package org.example;
import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.QueryParams;
import com.ecwid.consul.v1.Response;
import com.ecwid.consul.v1.agent.model.NewService;
import com.ecwid.consul.v1.health.HealthServicesRequest;
import com.ecwid.consul.v1.health.model.HealthService;
import com.ecwid.consul.v1.kv.model.GetValue;
import java.util.Arrays;
import java.util.List;
public class EcwidDemo {
public static void main(String[] args) {
ConsulClient client = new ConsulClient("localhost", 8500);
// set KV
byte[] binaryData = new byte[] {1,2,3,4,5,6,7};
client.setKVBinaryValue("someKey", binaryData);
client.setKVValue("com.my.app.foo", "foo");
client.setKVValue("com.my.app.bar", "bar");
client.setKVValue("com.your.app.foo", "hello");
client.setKVValue("com.your.app.bar", "world");
// get single KV for key
Response<GetValue> keyValueResponse = client.getKVValue("com.my.app.foo");
System.out.println(keyValueResponse.getValue().getKey() + ": " + keyValueResponse.getValue().getDecodedValue()); // prints "com.my.app.foo: foo"
// get list of KVs for key prefix (recursive)
Response<List<GetValue>> keyValuesResponse = client.getKVValues("com.my");
keyValuesResponse.getValue().forEach(value -> System.out.println(value.getKey() + ": " + value.getDecodedValue())); // prints "com.my.app.foo: foo" and "com.my.app.bar: bar"
//list known datacenters
Response<List<String>> response = client.getCatalogDatacenters();
System.out.println("Datacenters: " + response.getValue());
// register new service
NewService newService = new NewService();
newService.setId("myapp_01");
newService.setName("myapp");
newService.setTags(Arrays.asList("EU-West", "EU-East"));
newService.setPort(8080);
client.agentServiceRegister(newService);
// register new service with associated health check
// NewService newService2 = new NewService();
// newService2.setId("myapp_02");
// newService2.setTags(Collections.singletonList("EU-East"));
// newService2.setName("myapp");
// newService2.setPort(8080);
//
// NewService.Check serviceCheck = new NewService.Check();
// serviceCheck.setScript("/usr/bin/some-check-script");
// serviceCheck.setInterval("10s");
// newService2.setCheck(serviceCheck);
// client.agentServiceRegister(newService2);
// query for healthy services based on name (returns myapp_01 and myapp_02 if healthy)
HealthServicesRequest request = HealthServicesRequest.newBuilder()
.setPassing(true)
.setQueryParams(QueryParams.DEFAULT)
.build();
Response<List<HealthService>> healthyServices = client.getHealthServices("myapp", request);
// query for healthy services based on name and tag (returns myapp_01 if healthy)
HealthServicesRequest request2 = HealthServicesRequest.newBuilder()
.setTag("EU-West")
.setPassing(true)
.setQueryParams(QueryParams.DEFAULT)
.build();
Response<List<HealthService>> healthyServices2 = client.getHealthServices("myapp", request2);
}
}
对应的日志:
com.my.app.foo: foo
com.my.app.bar: bar
com.my.app.foo: foo
Datacenters: [dc1]
参考资料
https://blog.csdn.net/u012129558/article/details/84029365