不需要使用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

相关内容

热门资讯

第3分钟教你!欢乐茶馆辅助器,... 第3分钟教你!欢乐茶馆辅助器,玩吧辅助工具(都是存在有挂)-哔哩哔哩欢乐茶馆辅助器软件透明挂微扑克w...
8分钟分享!微乐小程序辅助开发... 8分钟分享!微乐小程序辅助开发透视,海盗来了大白辅助(确实是有挂)-哔哩哔哩1、进入到微乐小程序辅助...
第十分钟必备!随意玩最新跳转链... 第十分钟必备!随意玩最新跳转链接有辅助吗,斗棋联盟bug(本来真的是有挂)-哔哩哔哩1、这是跨平台的...
十分钟了解!微信老铁13水辅助... 十分钟了解!微信老铁13水辅助,凑一桌游戏免费辅助器(总是是真的挂)-哔哩哔哩1、凑一桌游戏免费辅助...
2分钟解谜!爱玩联盟辅助下载,... 2分钟解谜!爱玩联盟辅助下载,浙江游戏大厅脚本软件(其实是有挂)-哔哩哔哩1、很好的工具软件,可以解...
第一分钟关于!全民内蒙古辅助器... 第一分钟关于!全民内蒙古辅助器,宁夏划水辅助(一贯有挂)-哔哩哔哩全民内蒙古辅助器辅助器中分为三种模...
第1分钟关于!功夫川嘛辅助器是... 第1分钟关于!功夫川嘛辅助器是真的假的,瓜瓜丰城双剑旧版攻略(都是真的有挂)-哔哩哔哩1、功夫川嘛辅...
七分钟必备!胡乐安庆辅助工具,... 七分钟必备!胡乐安庆辅助工具,丰城呱呱辅助器(切实有挂)-哔哩哔哩1、全新机制【胡乐安庆辅助工具软件...
七分钟推荐!新道游修改器,顺欣... 七分钟推荐!新道游修改器,顺欣茶楼开挂(都是真的有挂)-哔哩哔哩一、顺欣茶楼开挂软件透明挂的定义与意...
十分钟揭露!边锋老友内蒙古辅助... 十分钟揭露!边锋老友内蒙古辅助,丫丫老陕开挂(真是有挂)-哔哩哔哩1、十分钟揭露!边锋老友内蒙古辅助...