SpringCloud学习二(Eureka注册中心)
项目地址:https://github.com/ZhongChunle/cloud-demo.git
1、搭建eureka-server
首先大家注册中心服务端:eureka-server,这必须是一个独立的微服务
在cloud-demo父工程下,创建一个子模块eureka-server
1.2、引入eureka依赖
引入SpringCloud为eureka提供的starter依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.3、编写启动类
也可以直接创建一个springboot的模块
给eureka-server服务编写一个启动类,一定要添加一个@EnableEurekaServer注解,开启eureka的注册中心功能:
package com.zcl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* 项目名称:cloud-demo
* 描述:引导类
*
* @author zhong
* @date 2022-05-27 7:05
*/
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1.4、创建application.yml
配置文件
server:
port: 10086
# 微服务名称
spring:
application:
name: eurekaserver
eureka:
client:
service-url: # 配置eureka地址
defaultZone: http://127.0.0.1:10086/eureka
1.5、启动Eureka的引导类,如下是启动后的eureka页面
2、Eureka服务注册
下面,我们将``user-service模块和
order-server`模块注册到eureka-server中去。
2.1、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2、配置文件
在user-service中,修改application.yml文件,添加服务名称、eureka地址:
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
启动多个user-service实例
为了演示一个服务有多个实例的场景,我们添加一个SpringBoot的启动配置,再启动一个user-service。
首先,复制原来的user-service启动配置:
然后,在弹出的窗口中,修改启动端口信息:
启动所有的端口服务,查看eureka-server管理页面:
如下就是服务列表实例
3、在order-server
完成服务的拉取,实现负载均衡
最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。
3.1、在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:
package cn.itcast.order;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* 创建RestTemplate并注入spring容器
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.2、修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:
// 2、利用RestTemplate发起http请求,查询用户
// String url = "http://localhost:8081/user/"+order.getUserId();
String url = "http://userserver/user/"+order.getUserId();
userserver:其实就是上面服务注册的
eureka
的服务名称
3.3、重启order-server
服务,访问返回如下json数据
我们修改了访问路径为服务的名称,你们我们又有两个
user-server
服务实例,那么负载均衡就会为我们论调服务实例,来完成user-server
的服务拉取获得user的信息
{
"id": 101,
"price": 699900,
"name": "Apple 苹果 iPhone 12 ",
"num": 1,
"userId": 1,
"user": {
"id": 1,
"username": "柳岩",
"address": "湖南省衡阳市"
}
}