1、通过Eureka的一次远程服务调用的过程
2、Eureka的作用
3、在Eureka架构中,微服务角色有两类:
1、搭建EurekaServer服务步骤:
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 10086 # 服务端口
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
# register-with-eureka: true #false表示不向注册中心注册自己。
# fetch-registry: true #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
2、模拟多实例部署
3、服务注册
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
4、服务消费者完成服务拉取
String url = "http://userservice/user/" + order.getUserId();
@Bean
@LoadBalanced //表示被Ribbon拦截,并进行负载均衡处理
public RestTemplate restTemplate() {
return new RestTemplate();
}
1、Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则;默认规则是ZoneAvoidanceRule,即在一个Zone内进行轮询访问
@Bean
public IRule randomRule() {
return new RandomRule();
}
userservice: #这里是服务提供者的名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则,随机访问
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: # 指定饥饿加载的服务名称,如果只有一个微服务,也可以直接写在上面
- userservice # 如果写在下面,则要加个-,后续如果要添加其他微服务,继续加即可
1、Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高
2、将微服务注册到Nacos
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.2.5.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
spring:
cloud:
nacos:
server-addr: nacos:8849 # nacos服务地址
2、设置服务集群属性:修改application.yml文件
spring:
cloud:
nacos:
server-addr: nacos:8849 # nacos服务地址
discovery:
cluster-name: HZ #配置集群名称,HZ代码杭州
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则,在集群内部采用随机访问,如果本地没有,则会进行跨集群访问
spring:
cloud:
nacos:
server-addr: nacos:8849 # nacos服务地址
discovery:
cluster-name: HZ #集群名称
namespace: 014035c1-8176-4b5e-9423-0e85c6d2cd41 # dev环境,即命名空间的ID
ephemeral: false # 是否是临时实例
1、共同点:
2、不同点
3、修改非临时实例的方法,即修改实例的application.yml文件
spring:
cloud:
nacos:
server-addr: nacos:8849 # nacos服务地址
discovery:
ephemeral: false # 是否是临时实例,默认是true
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
spring:
application:
name: userservice
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8849 # nacos地址
config:
file-extension: yaml # 文件后缀名
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Value("${pattern.dateformat}")
private String dateformat;
...
}
@Data
@Component
@ConfigurationProperties(prefix = "pattern") //这里通过约定大于配置的方式自动根据配置属性名匹配
public class PatternProperties {
private String dateformat;
private String envSharedValue;
private String name;
}