一:服务远程调用
1.任务:
在order里远程调用user.(order对user发起请求)
2.实现步骤:
step1:在order的启动类OrderApplication里注册RestTemplate
(创建RestTemplate并注入Spring容器)
step2:修改查询方法,使用RestTemplate远程调用服务user
如下代码:
url:前面是IP和端口,后面是user的请求参数: “/user”,在user服务里可以看到,其接受响应的路径参数为: “/user”
二:Eureka实践
1.搭建Eureka注册中心
step1:新建eurka-server模块
引入maven
step2:引入eurka依赖
在该项目的xml文件中引入eurka依赖
不需要指定版本,因为在父工程(cloud-demo)的xml文件中已经指定好了(同springboot)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
step3:编写启动类(main函数),添加@EnableEurekaServer注解
注意启动类的位置
(feign与gateway的位置也一样)
public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
step4:添加application.yml文件,编写配置--用于服务注册
在resource包下创建yml文件---用于服务注册--自己注册到自己上
关于为什么要配置eureka的地址信息?
eureka也是一个服务,其同order和user一样在父工程下的一个服务(功能)。其是注册中心,也要配置端口号和请求路径(http://127.0.0.1:10086/eureka),将自身注册进去。
注意:eureka是服务,且承担大量服务的注册和发现操作。其非常关键。因此同重要数据一样,多级备份。不同区域,同一区域多台。
server: port: 10086 # 服务端口 spring: application: name: eurekaserver # eureka的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
eureka的UI界面
浏览器输入地址信息http://127.0.0.1:10086,即可跳转eureka的UI界面。便于查看当前注册中心管理的各个服务情况
2.服务注册
Step1:引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
step2:添加服务注册的配置
eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka
注册多个实例:
添加 应用程序 服务(不是Java草稿)
然后右键复制配置,看弹幕,编辑配置,允许多个实例,修改原yml文件中的端口号,重新运行,即可实现。
10-Eureka-服务注册_哔哩哔哩_bilibili
IDEA 2023.2新版如何将同一个项目开启多个,模拟集群环境_idea同一个项目打开两个窗口-CSDN博客
3.服务发现
Step1:orderservice里的访问路径url, 服务名替换原来的IP端口
原来:
现在:
Step2:添加负载均衡注解--多个实例“平衡分担请求(流量)”
@Bean 是注册RestTemplate,创建bean对象,交给IOC容器管理
4.总结
三:Ribbon实践--调整负载均衡策略
通过IRule接口 选择某个服务实例----IRule接口的实现类,是不同的负载均衡策略。通过修改其参数可以实现不同的策略
1.调整负载均衡策略
方法一:启动类定义新的Irule
方法二:配置文件中定义规则
userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
2.饥饿加载
ribbon: eager-load: enabled: true # 开启饥饿加载 clients: # 指定饥饿加载的服务名称 - userservice
四:nacos实践--注册中心与配置管理
1.注册中心(服务中心)
1.1 认识安装nacos
(1)启动
bin目录打开,输入: .\startup.cmd -m standalone
(2)打开UI界面
点如下连接,跳转页面,账号密码都是nacos
1.2 服务注册
将order服务与user服务注册到nacos里
1.3 添加服务集群属性
配置文件加属性
1.4 将负载均衡策略调整为:集群优先
配置文件加参数
1.5 将负载均衡策略调整为:权重优先
nacos控制台操作
(权重大不是一定调用权重大的,还是具有随机性,同线程的优先级)
1.6 配置环境隔离
给那个服务添加环境隔离属性,就修改其配置
1.7 设置 临时实例属性
修改文件配置
2.统一配置管理
目标:服务A远程调用B,B调用C,.....,
在服务集群很大时,这个远程调用链路几十上百个
而当我们在:修改服务A的某个配置时,就可能需要修改它调用的服务的配置。而一个一个地去找这些服务并修改配置是繁琐地。
nacos统一配置管理:
step1:
nacos界面(控制台):对服务A建立一个配置文件yaml,把常变的一些配置 放进 这个配置文件中。实现被调用服务的热更新。
step2:
在服务A里:(1)引入nacos统一配置管理依赖
(2)在配置文件里添加:识别nacos控制台新建的配置文件yaml。
step1:新建配置文件---nacos控制台操作
对需要统一配置管理的服务新建配置文件---nacos控制台操作
step2: 对需统一配置管理的服务引入依赖+添加新配置文件
step3: 配置热更新
springboot里:属性配置两种方式:
(1)@value
(2)@ConfigurationProperties
配置属性的热更新同样在这两种方法上修改
(1)@value方法配置的属性
这个变量在服务user的那个类里,就在这个类上上添加**@RefreshScope注解**
(2)@ConfigurationProperties配置的属性
@ConfigurationProperties(prefix = "pattern")
关于属性:prefix
本实验中:@ConfigurationProperties(prefix = "pattern")
所有配置文件含
版权归原作者 leeyayai_xixihah 所有, 如有侵权,请联系我们删除。