目录
1:原理结构图
2:搭建Eureka Server服务注册中心
3:搭建Eureka Provider (服务提供者,即Eureka Client)
4:搭建 Eurka-Consumer
创建工程,引入Eureka,创建好的工程pom文件如下:
4.0.0
com.eureka
EurekaServer
0.0.1-SNAPSHOT
jar
EurekaServer
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
UTF-8
UTF-8
1.8
Greenwich.M3
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
在启动类上加上 @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);
}
}
配置application.yml文件
server:
port: 8081 #服务注册中心端口号
eureka:
instance:
hostname: 127.0.0.1 #服务注册中心IP地址
client:
registerWithEureka: false #是否向服务注册中心注册自己
fetchRegistry: false #是否检索服务
serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
打成jar包,运行该工程后,在浏览器上输入http://127.0.0.1:8081,看到如下界面,目前该页面暂无注册的服务提供者和消费者
创建工程,引入eureka 和spring boot web,其pom文件如下:
4.0.0
com.eureka
EurekaProvider
0.0.1
jar
EurekaProvider
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
UTF-8
UTF-8
1.8
Greenwich.M3
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
创建一个RestController访问方法:
@Value("${server.port}")
private String port;
@GetMapping("/home")
public String homePage() {
return "Welcome to home page"+" : " + port;
}
在启动类上加上 @EnableEurekaClient注解,申明是Eureka客户端
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class EurekaProviderApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
配置application.yml文件
eureka:
client:
serviceUrl: #注册中心的注册地址
defaultZone: http://127.0.0.1:8081/eureka/
server:
port: 8082 #服务端口号
spring:
application:
name: service-provider #服务名称--调用的时候根据名称来调用该服务的方法
打成jar,运行两个实例
java -jar EurekaProvider-0.0.1.jar //配置文件中设置成8082端口
java -jar EurekaProvider-0.0.1.jar --server.port=8083
成功运行后,Eureka服务注册中心会注册两个provider实例,如下界面:
主要目的是用来消费服务,同时提供负载均衡的功能。引入Eurka,web后的pom文件如下:
4.0.0
com.eureka
EurekaConsumer
0.0.1-SNAPSHOT
jar
EurekaConsumer
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
UTF-8
UTF-8
1.8
Greenwich.M3
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
在启动类中往spring boot容器中添加RestTemplate对象和IRule对象(用于负载均衡),后期会对常用的负载均衡策略方法做个总结。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
@SpringBootApplication
@EnableEurekaClient
public class EurekaConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate rest() {
return new RestTemplate();
}
@Bean
public IRule ribbonRule() {
return new RandomRule(); //随机负载均衡策略,如未向容器中注入,默认是轮询方式
}
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
注意:在往容器中注入RestTemplate对象时,需要加上@LoadBalanced注解,否则不能正常访问Eurka中的服务。其原理可以参考https://blog.csdn.net/jin5203344/article/details/80496078
添加Controller,提供给外部访问的接口以及访问provider提供的接口
@RestController
public class goHomePage {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/home")
public String getHome() {
String data = restTemplate.getForObject("http://service-provider/home", String.class);
return data;
}
}
配置application. yml
eureka:
client:
serviceUrl: #注册中心的注册地址
defaultZone: http://127.0.0.1:8081/eureka/
server:
port: 8093 #服务端口号
spring:
application:
name: service-consumer #服务名称--调用的时候根据名称来调用该服务的方法
运行Consumer项目,在Eureka 注册中心的管理页面上可以看到其注册信息
目前为止,已经完成 Eureka的注册中心,服务提供者,消费者。在浏览器中输入http://127.0.0.1:8093/home 即可访问到服务提供者提供的数据,如下截图:
Eureka在开发调试时会涉及到多个服务提供者,不适合点对点的调测,故后续会记录点对点的直连方式,结构如下: