使用Eureka进行服务发现,结合Traefik作为反向代理和负载均衡器,并在Docker容器中运行微服务,可以构建一个高效且可扩展的微服务架构。以下是一个详细的步骤指南,帮助你实现这一组合。
首先,你需要设置一个Eureka服务器来进行服务发现。
使用Spring Initializr创建一个新的Spring Boot项目,并添加以下依赖:
在application.yml
文件中配置Eureka服务器:
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/
在你的主类上添加@EnableEurekaServer
注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
接下来,创建一个或多个微服务,并将它们注册到Eureka服务器。
使用Spring Initializr创建一个新的Spring Boot项目,并添加以下依赖:
在application.yml
文件中配置微服务:
server:
port: 8081
spring:
application:
name: my-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
在你的主类上添加@EnableDiscoveryClient
注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class MyServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MyServiceApplication.class, args);
}
}
Traefik将作为反向代理和负载均衡器,自动从Eureka获取服务实例。
创建一个traefik.toml
文件:
[entryPoints]
[entryPoints.web]
address = ":80"
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
network = "web"
[api]
dashboard = true
[providers.eureka]
endpoint = "http://localhost:8761/eureka/"
prefix = "traefik"
创建一个Docker网络,以便Traefik和微服务可以相互通信:
docker network create web
为Eureka服务器、Traefik和微服务创建Dockerfile,并构建和运行Docker容器。
FROM openjdk:11-jre-slim
COPY target/eureka-server.jar eureka-server.jar
ENTRYPOINT ["java", "-jar", "eureka-server.jar"]
FROM openjdk:11-jre-slim
COPY target/my-service.jar my-service.jar
ENTRYPOINT ["java", "-jar", "my-service.jar"]
构建镜像并运行容器:
docker build -t eureka-server .
docker run -d --name eureka-server --network web -p 8761:8761 eureka-server
docker build -t my-service .
docker run -d --name my-service --network web -p 8081:8081 my-service
docker run -d --name traefik --network web -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock traefik:v2.4 --configFile=/traefik.toml
打开浏览器访问http://localhost
,你应该能看到Traefik的仪表盘,并且能够通过服务名称访问你的微服务。
领取专属 10元无门槛券
手把手带您无忧上云