SpringCloud------Eureka,Ribbon,Nacos

认识微服务

微服务技术栈 

 微服务概念

微服务结构

微服务技术对比

企业需求

SpringCloud

认识Springcloud 

服务拆分及远程调用

每个服务只能查询自己数据库中的表,导致其他服务如果想使用别人的表数据,这就需要进行远程调用,这里使用RestTemplate进行发送http请求来实现远程调用

第一步:在启动类中创建Restemplate对象
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTempalte并注入Spring容器
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}
第二步:在订单服务中通过注入RestTemplate来发送http请求到用户服务中
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

        // 2。利用RestTemplate发起http请求,查询用户
        String url = "http://localhost:8081/user/"+order.getUserId();
        User user = restTemplate.getForObject(url, User.class);

        //3. 封装数据
        order.setUser(user);

        // 4.返回
        return order;
    }
}

上面这种方式并没有体现或者使用微服务技术,而且会有很多的问题

Eureka 

硬编码导致程序复用性太低,所以到底服务消费者怎样获取地址以及如何选择。所以我们引入一门新技术Eureka

 

使用Eureka步骤:

①搭建Eureka服务器

 第一步:引入依赖
        <!--        eureka服务器依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
 第二步:在启动类上添加注解@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}
第三步:配置Eureka信息
server:
  port: 10086 # 服务端口

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

 ②服务注册,即微服务在Eureka上注册登记

第一步:引入依赖
<!--        eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
第二步:配置文件
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver


  application:
    name: userservice  # user服务端名称



eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

③服务拉取,即一个微服务拉取另外一个微服务的服务

第一步:修改Service层的代码,把硬编码改为服务名
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

        // 2。利用RestTemplate发起http请求,查询用户
        String url = "http://userservice/user/"+order.getUserId();//使用rureka服务名
        User user = restTemplate.getForObject(url, User.class);

        //3. 封装数据
        order.setUser(user);

        // 4.返回
        return order;
    }
}
第二步:负载均衡,在启动类上加@LoadBalanced注解
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTempalte并注入Spring容器
     * @return
     */
    @Bean
    @LoadBalanced //负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

④总结

Ribbon负载均衡原理

 获取Service服务列表:

负载均衡的策略:

负载均衡规则详解:

修改负载均衡规则:

①在拉取服务的消费者中的启动类中设置:

②在拉取服务的消费者中的yml配置文件中设置:

饥饿加载:

Nacos

启动命令:startup.cmd -m standalone

服务注册和拉取: 

第一步:引入依赖
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        <!-- nacos客户端依赖包 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
 第二步:更改配置
  application:
    name: orderservice  # orderservice服务端名称
  cloud:
    nacos:
      server-addr: localhost:8848

服务多级存储模型(服务-集群-实例)

  application:
    name: orderservice  # orderservice服务端名称 
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名字
        集群模式下的负载均衡规则:
  application:
    name: orderservice  # orderservice服务端名称
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名字
  userservice:
    ribbon:
      NFLoadBanlancerRuleClassName : com.alibaba.cloud.nacos.ribbon.NacosRule

        服务实例的权重设置:

         环境隔离

  application:
    name: orderservice  # orderservice服务端名称
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名字
        namespace: a7e40dd8-f071-420a-ac82-58be16660415 #配置namespace
  userservice:
    ribbon:
      NFLoadBanlancerRuleClassName : com.alibaba.cloud.nacos.ribbon.NacosRule

Eureka和Nacos的总结对比 

①与Eureka不同的是,Nacos中服务提供者被划分了临时实例和非临时实例。临时实例是以心跳监测健康状态,当不健康就会被剥离。而非临时实例是以nacos主动询问健康状态,就算不健康也不会被剥离。

②在Eureka中,消费者每隔30秒去注册中心pull拉取服务列表并缓存,而在Nacos中消费者是以拉取pull+注册中心主动推送变更消息push来获取服务列表

Nacos的配置管理 

 统一配置管理

第一步:添加统一配置文件:

第二步:引入依赖:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

第三步:获取配置文件:

 bootstrp.yml:

spring:
  application:
    name: userservice
  profiles:
    active: dev #环境
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos的地址
      config:
        file-extension: yaml #文件类型

 

配置的热更新

 

多环境配置共享 

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值