一、创建Eureka注册中心
1. 创建Eureka注册中心工程
- 【创建普通工程,parent为”parent工程”】
- 添加eureka依赖 【因为parent有springcloud 和spring boot的版本管理 所以不需要有version】
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
2 .@EnableEurekaServer
主启动类添加@EnableEurekaServer 注解/*** @EnableEurekaServer: 启动Eureka功能*/@EnableEurekaServer@SpringBootApplicationpublic class Pro05SpringCloudEurekaApplication {public static void main(String[] args) {SpringApplication.run(Pro05SpringCloudEurekaApplication.class, args);}}
3. application.yaml
编写配置文件 ```yaml server: port: 5000
eureka: instance: hostname: localhost # 配置当前Eureka服务的主机地址 client: register-with-eureka: false # 当前服务本身就是注册中心,不必“自己注册自己” fetch-registry: false # 当前服务本身就是注册中心,不必“从注册中心取回信息” service-url: # 客户端(指consumer、provider)访问当前注册中心时使用的地址 defaultZone: http://${eureka.instance.hostname}/${server.port}/eureka
<a name="U42m1"></a>## 4. Eureka启动报错jdk 版本问题,高版本的jdk去除了一些类```xml<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.0</version></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.3.0</version></dependency><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.0</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency>
二、将provider注册到Eureka
1. 加入依赖
[在provider工程中操作] 加入 eureka-client 依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2. application.yaml
配置provider 的application.yaml
server:port: 1000# 将provider工程注册到eureka# 配置当前微服务作为Eureka客户端访问Eureka服务器端时使用的地址eureka:client:serviceUrl:defaultZone: http://localhost:5000/eureka/
3. 在provider上添加注解 [不用加]
关于相关注解 【在provider的启动类上添加】
- 较低版本需要使用@EnableEurekaClient 注解。
- 稍高版本也可以使用@EnableDiscoveryClient 注解。 当前版本可以省略。
4. 注册成功后的效果

这里显示UNKNOWN是因为provider工程没有指定应用名称,指定应用名称配置方式如下:
# 指定微服务的名称,以便将来通过微服务名称调用当前微服务时能找到spring:application:name: provider
以后在springCloud环境下开发,每个微服务工程都要设置一个应用名称
三、目标
1. 目标:consumer访问provider的时候 使用微服务名称 代替 localhost:1000
1) consumer工程添加 eureka-client 依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>
2) consumer工程中的application.yaml 添加下面配置
server:port: 4000spring:application:name: consumereureka:client:service-url:defaultZone: http://localhost:5000/eureka/
3) 在配置类中的restTemplate添加@LoadBalanced注解
这个注解会 给这个组件 有负载均衡的功能
@Configurationpublic class CloudConfig {@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
4) 修改controller
修改consumer的controller方法
把localhost:1000 改为 http://provider
@RestControllerpublic class MyController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/consumer/get/emp")public Employee employee(){// 1.远程调用方法的主机// String host = "http://localhost:1000";// 将远程微服务调用地址从 "IP地址+端口号改成"微服务名称""String host = "http://provider";// 2.远程调用方法的具体URL地址String url = "/provider/get/employee";Employee forObject = restTemplate.getForObject(host + url, Employee.class);return forObject;}}
2. 目标:provider以集群方式启动
修改 provider的controller方法
@RestControllerpublic class ProviderController {@RequestMapping("/provider/get/QQId")public String getQQ(HttpServletRequest request){// 获取端口号int serverPort = request.getServerPort();return "2298320493 ---> " + serverPort;}}
IDEA运行多个实例: 右上角Edit Configurations 点击右上角的Allow parallel run 就可以运行多个实例了
开启一次修改一次配置文件:端口号分别是 1000 2000 3000
1) 注意:
provider 的微服务名称必须使用同一个名称才能构成一个集群,否则将不会认定为 是属于同一个集群。
- 然后consumer每次调用provider的controller时 就有了负载均衡
