不需要使用Spring的嵌入式发现服务
创始人
2025-01-10 15:01:37
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

相关内容

热门资讯

安卓换鸿蒙系统会卡吗,体验流畅... 最近手机圈可是热闹非凡呢!不少安卓用户都在议论纷纷,说鸿蒙系统要来啦!那么,安卓手机换上鸿蒙系统后,...
安卓系统拦截短信在哪,安卓系统... 你是不是也遇到了这种情况:手机里突然冒出了很多垃圾短信,烦不胜烦?别急,今天就来教你怎么在安卓系统里...
app安卓系统登录不了,解锁登... 最近是不是你也遇到了这样的烦恼:手机里那个心爱的APP,突然就登录不上了?别急,让我来帮你一步步排查...
安卓系统要维护多久,安卓系统维... 你有没有想过,你的安卓手机里那个陪伴你度过了无数日夜的安卓系统,它究竟要陪伴你多久呢?这个问题,估计...
windows官网系统多少钱 Windows官网系统价格一览:了解正版Windows的购买成本Windows 11官方价格解析微软...
安卓系统如何卸载app,轻松掌... 手机里的App越来越多,是不是感觉内存不够用了?别急,今天就来教你怎么轻松卸载安卓系统里的App,让...
怎么复制照片安卓系统,操作步骤... 亲爱的手机控们,是不是有时候想把自己的手机照片分享给朋友,或者备份到电脑上呢?别急,今天就来教你怎么...
安卓系统应用怎么重装,安卓应用... 手机里的安卓应用突然罢工了,是不是让你头疼不已?别急,今天就来手把手教你如何重装安卓系统应用,让你的...
iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
安装了Anaconda之后找不... 在安装Anaconda后,如果找不到Jupyter Notebook,可以尝试以下解决方法:检查环境...