【3.2】Eureka-搭建注册中心/服务注册/服务发现


在这里插入图片描述

1 搭建EurekaServer

搭建EurekaServer服务步骤如下:

  1. 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

可以看到,依赖的后缀是eureka-server,也就说明它是eureka服务端的依赖。中间有一个starter,是springboot里面的自动装配。
也就是说在这个依赖里面已经帮我们把spring,eureka所有的配置都做好了。
当然,自动装配也是需要有开关的。

  1. 编写启动类,添加@EnableEurekaServer注解
    这个注解就是EurekaServer自动装配的开关。

  2. 添加application.yml文件,编写下面的配置:

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

1.1 详细步骤

在这里插入图片描述
在这里插入图片描述
接下来给项目里引入依赖:
在这里插入图片描述这里不用指定版本信息,原因是在父工程中已经把这些依赖的版本管理好了。
接下来去编写main函数:
在这里插入图片描述
补充图上内容:
在这里插入图片描述

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

然后再添加一个配置文件:application.yml
在这里插入图片描述
在这里插入图片描述

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

这里可能有疑问:我自己就是eureka了为什么还要配置自己的地址信息呢?
因为eureka自己也是一个微服务,eureka在启动时,会将自己也注册到eureka上。这是为了将来eureka集群之间通信去用的。
这里的配置服务名称和服务地址是为了做服务注册。


接下来找到main函数,启动eureka:
Ctrl+Shift+F10
在这里插入图片描述
点击端口号:
在这里插入图片描述
可以看到
在这里插入图片描述
显示有System Status(系统状态),General Info(通用信息)等;
最重要的是中间的:
在这里插入图片描述
其中Instances currently registered with Eureka就是注册到Eureka的实例。
什么是实例?
一个服务,每部署一个/一份,就叫一个实例。 比如说user服务,将来部署10个,那就是10个实例。
Eureka会记录一个服务的所有实例。
刚刚提到Eureka会注册自己,图中的EUREKASERVER就是它自身的服务名称,后面就是它的端口和ip。
UP表示正常状态,DOWN表示挂了。


1.2 搭建EurekaServer小结

  1. 引入eureka-server依赖;
  2. 添加@EnableEurekaServer注解;
  3. 在application.yml中配置eureka地址。

2 服务注册

将user-service服务注册到EurekaServer步骤如下:

  1. 在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
<!--eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  1. 在application.yml文件,编写下面的配置:
spring:
  application:
    name: userservice # user服务的服务名称
eureka:
  client:
    service-url:  #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

2.1 详细步骤(踩坑点!解决)

打开user-service的pom.xml,添加依赖
在这里插入图片描述
打开user-service的application.yml:
添加:
在这里插入图片描述
一定要注意缩进的问题!还有冒号后面的空格!

将order-service注册到eureka中同理。
之后重启服务:
这里看到:
在这里插入图片描述
第一次启动我发现这里显示的是UNKNOWN,不是我配置的服务名称,这里寻求了一下百度~
大家可以参考这里
yml文件对大小写以及缩进对齐都比较严格,这里我仔细核对了一下我的yml文件,发现我的application多缩进了一点,大家也要注意这个问题。
在这里插入图片描述
之后重新启动:
在这里插入图片描述
UNKNOWN的问题成功解决。


2.2 模拟多实例部署

这里找到Services中的UserApplication,右键,点击Copy Configuration
在这里插入图片描述
在这里插入图片描述
在VM options中加
-Dserver.port=8082
也就是换个端口号,否则会冲突。
-D代表参数
点击Apply。然后启动它可以看到:
在这里插入图片描述
然后回到浏览器,刷新一下:
在这里插入图片描述
可以看到UP(2)也就是注册了两个实例。


2.3 服务注册小结

  • 引入eureka-client依赖;
  • 在application.yml中配置eureka地址。
  • 无论是消费者还是提供者,引入eureka-client依赖,知道eureka地址后,都可以完成服务注册。

3 服务发现

在order-service完成服务拉取:

服务拉取是基于服务名称获取服务列表,然后再对服务列表做负载均衡。

  1. 修改OrderService的代码,修改访问的url路径,用服务名代替ip,端口:
String url = "http://userservice/user/"+order.getUserId();
  1. 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

3.1 详细步骤

首先修改order-service的业务代码:
原来是硬编码(ip+端口号),现在改为写user服务的名称,也就是上面注册了的user服务的服务名称。
在这里插入图片描述
第二步,找到OrderApplication,加上@LoadBalanced注解
在这里插入图片描述
最后重启OrderApplication;
然后把两个UserApplication的日志清空:
在这里插入图片描述
这是为了看清楚,当我们访问OrderService时,访问的究竟是UserService还是UserService2
接下来发起请求,多发几次:
在这里插入图片描述
在这里插入图片描述
然后打开idea看一下日志:
在UserApplication中:
在这里插入图片描述

在UserApplication2中:
在这里插入图片描述
可以看出来实现了负载均衡。
我们根本不用去关心服务的地址,只用把服务名称一放,就ok。剩下的事情就交给Eureka客户端工具去做。


4 总结

1.搭建EurekaServer:

  • 引入eureka-server依赖;
  • 添加@EnableEurekaServer注解;
  • 在application.yml中配置eureka地址。

2.服务注册:

  • 引入eureka-client依赖;
  • 在application.yml中配置eureka地址。

3.服务发现

  • 引入eureka-client依赖;
  • 在application.yml中配置eureka地址;
  • 给RestTemplate添加@LoadBalanced注解;
  • 用服务提供者的服务名称远程调用。

By --Suki 2023/1/3

知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值