不需要使用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软件是正规的吗,wpk真的有透视嘛,必备教程(有挂脚本)1、让任何用户在无需wpk软...
透视有挂!wpk软件是正规的吗... 透视有挂!wpk软件是正规的吗,wpk安卓下载辅助,wpk教程(有挂工具)1、完成wpk软件是正规的...
透视黑科技!wpk辅助软件,w... 透视黑科技!wpk辅助软件,wpk透视辅助下载,透明挂教程(有挂黑科技)一、wpk透视辅助下载软件透...
透视肯定!wpk透视辅助方法,... 透视肯定!wpk透视辅助方法,wpk作弊是真的吗,必备教程(有挂工具)1、起透看视 wpk作弊是真的...
透视软件!wpk模拟器,wpk... 透视软件!wpk模拟器,wpk透视是真的假的,攻略教程(有挂规律)1、wpk透视是真的假的透视辅助简...
透视好友房!wpk可以作弊吗,... 透视好友房!wpk可以作弊吗,wpk辅助哪里买,AI教程(有挂插件);1、每一步都需要思考,不同水平...
透视总结!wpk插件,wpk真... 透视总结!wpk插件,wpk真吗,力荐教程(有挂详情)1、全新机制【wpk插件软件透明挂】2、全新【...
透视计算!wpk真吗,wpk模... 透视计算!wpk真吗,wpk模拟器,解密教程(有挂解密)1)wpk模拟器辅助挂:进一步探索wpk模拟...
透视好友房!wpk私人局辅助是... 透视好友房!wpk私人局辅助是真的吗,wpk有辅助器吗,爆料教程(有挂脚本);一、wpk私人局辅助是...
透视了解!wpk控制牌是真的吗... 透视了解!wpk控制牌是真的吗,wpk透视是真的假的,新2025教程(有挂辅助)1、让任何用户在无需...