不需要使用Spring的嵌入式发现服务
创始人
2025-01-10 15:00:13
0
  1. 使用 Spotify 的 Java 客户端库,在项目中添加以下依赖:

    com.spotify
    docker-client
    8.16.0

  1. 创建一个服务发现类,该类负责查询 Docker Swarm 集群中运行的服务:
import com.spotify.docker.client.DockerClient;
import com.spotify.docker.client.DockerClient.ListServicesParam;
import com.spotify.docker.client.DockerClient.ListTasksParam;
import com.spotify.docker.client.DockerClient.ListTasksParamBuilder;
import com.spotify.docker.client.exceptions.DockerCertificateException;
import com.spotify.docker.client.exceptions.DockerException;
import com.spotify.docker.client.messages.swarm.Service;
import com.spotify.docker.client.messages.swarm.Task;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class DockerSwarmServiceDiscovery {
    
    private final DockerClient dockerClient;
    
    public DockerSwarmServiceDiscovery() throws DockerCertificateException {
        this.dockerClient = DefaultDockerClient.fromEnv().build();
    }
    
    public List getServiceEndpoints(String serviceName) {
        try {
            final List services = this.dockerClient.listServices(ListServicesParam.create().serviceName(serviceName)).stream().filter(s -> s.spec().name().equals(serviceName)).collect(Collectors.toList());
            final List endpoints = new ArrayList<>();
            
            for (Service service : services) {
                final ListTasksParamBuilder tasksParamBuilder = ListTasksParam.builder().serviceId(service.id());
                
                final List tasks = this.dockerClient.listTasks(tasksParamBuilder.build());
                
                for (Task task : tasks) {
                    endpoints.add(String.format("%s:%d", task.status().containerStatus().containerId(), task.status().containerStatus().ports().get(0).publicPort()));
                }
            }
            
            return endpoints;
        } catch (DockerException | InterruptedException e) {
            throw new RuntimeException("Error providing service endpoints", e);
        }
    }
}
  1. 在需要使用服务的代码中,实例化上述服务发现类并查询指定服务的 IP 和端口:
final DockerSwarmService

相关内容

热门资讯

最新技巧!大玩家福建十三水辅助... 最新技巧!大玩家福建十三水辅助,决战辅助软件,详细器(有挂技术)大玩家福建十三水辅助脚本下载中分为三...
截至目前!wpk官网下载链接,... 截至目前!wpk官网下载链接,德扑之星辅助工具如何打开,其实是有挂(有挂工具)1、德扑之星辅助工具如...
玩家必看科普!闲来辅助神器怎么... 您好,闲来辅助神器怎么下载这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很...
近日!hhpoker辅助挂,智... 近日!hhpoker辅助挂,智星德州插件怎么下载,原来是真的有挂(有挂攻略)1、这是跨平台的智星德州...
一分钟秒懂!胡乐胡乐辅助脚本可... 一分钟秒懂!胡乐胡乐辅助脚本可靠吗,wepoker免费脚本,详细插件(确实有挂)小薇(辅助器软件下载...
软件辅助挂!wepoker手机... 软件辅助挂!wepoker手机助手,德普之星app安卓版破解版,总是真的是有挂(有挂总结)进入游戏-...
重大科普!福州十八扑破解,大唐... 重大科普!福州十八扑破解,大唐山西辅助软件,详细软件(真是有挂)1、下载好大唐山西辅助软件脚本下载之...
推出新举措!wpk可以作弊吗,... 推出新举措!wpk可以作弊吗,德扑之星透视免费,好像真的有挂(真的有挂)1、不需要AI权限,帮助你快...
玩家必备教程!楚天游辅助,威信... 玩家必备教程!楚天游辅助,威信茶馆app插件,详细器(有挂解密)1、很好的工具软件,可以解锁游戏的威...
为切实保障!德州透视hhpok... 为切实保障!德州透视hhpoker,德普之星辅助软件,切实真的有挂(证实有挂)暗藏猫腻,小编详细说明...