springcloudalibaba-2 nacos注册中心

分布式部署   在端口号为 8082 和  8083  的两个实例中 进行 轮播 和随机   使用 nacos  进行操作

nacos的作用就是一个注册中心,用来管理注册上来的各个微服务

下载安装并启动 nacos

1、下载nacos

下载地址: Releases · alibaba/nacos · GitHub

下载zip格式的安装包,然后进行解压缩操作

1.4.1的下载地址是:

https://github.com/alibaba/nacos/releases/tag/1.4.1

2、启动 nacos

在 nacos 的 bin 目录 进行启动  两种方式

一种 在 Xshell 启动 .sh  一种在 windows 启动 cmd

不以集群启动,以个例启动   windows

startup.cmd -m standalone

linux启动的时候使用的命令是:sh startup.sh -m standalone

第3步: 访问nacos

打开浏览器输入http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos

将product微服务注册到nacos

1.在pom.xml中添加nacos的依赖  添加在 订单消费者的pom文件中

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

2. 在主启动类上添加nacos的开启注解

@EnableDiscoveryClient

3. 在application.properties添加nacos的配置

a.设置微服务的名字

b.设置端口号

c.添加到注册中心,将该服务交给注册中心去管理

application.properties相关内容如下:

server.port=8081
# 将微服务注册到注册中心 localhost:8848
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 微服务的名字
spring.application.name=order

开启注解,能够让注册中心扫描到该服务

@EnableDiscoveryClient

注册成功

点击详情 如果最后一位是 1 则需要 更改 ip   改为自己的

找到网络适配器

重启项目,查看详情

将 订单 和 商品  放在 service 里边

然后更改 pom  文件里边的配置  相同的放在  sys-service 里边

 <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>sys-comm</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

    </dependencies>

然后 更改 order pro  pro1   改  service  为父亲

然后更改 application.properties     两个 pro  pro1  相同  接着打开  nacos

product   里边有两个微服务   点击详情显示   

部署小集群

微服务里面写两个一模一样的项目(端口号不一样) 注册到  nacos 里面

负载均衡   (实现轮询 和 随机的效果)

什么是负载均衡

通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上 进行执行。

使用负载均衡

Spring Cloud Dubbo 从 2021.0.1.0 起已被移除出主干,不再随主干演进

轮询算法

使用的时候必须加jar  在service 里边

在 orderController 里边 注入 Bean  

@Resource
private LoadBalancerClient loadBalancerClient;

代码实现

@GetMapping("addOrder2/{pid}")
public Object addDrder2( @PathVariable Integer pid){

ServiceInstance choose = loadBalancerClient.choose("product"); 

 //  product  在application.preporties里边的 名称

String requestMsg = "方式二 GET 请求 RibbonServer";
String url = String.format("http://%s:%s", choose.getHost(), choose.getPort() + "/pro/"+pid);


//1.根据商品的id得到商品的信息
Product forObject = restTemplate.getForObject(url ,Product.class);

return forObject;
}

成功效果图

随机算法

注入Bean

@Resource
private DiscoveryClient discoveryClient; // 发现客户端

代码实现

//  随机算法
    @GetMapping("addOrder3/{pid}")
    public Object addDrder3( @PathVariable Integer pid){
        // 获取项目名   有可能是集群   所以是  List
        List<ServiceInstance> product = discoveryClient.getInstances("product");
        // 获取  ServiceInstance  里边的 端口号  和 IP 地址   的个数
        int size = product.size();
        // 索引小于  size   整数   最大值为  size - 1
        int i = new Random().nextInt(size);
        ServiceInstance choose = product.get(i);

        String url = String.format("http://%s:%s", choose.getHost(), choose.getPort() + "/pro/"+pid);
        System.out.println("***"+url);


        //1.根据商品的id得到商品的信息
        Product forObject = restTemplate.getForObject(url ,Product.class);

        return forObject;
    }

成功效果图

使用 feign 实现服务调用

FeignClient和RestTemplate

SpirngCloud 中,默认是使用HTTP进行微服务间通信,其中最常用的有两种实现形式

        RestTemplate

        Feign

RestTempale

        其实在SpringWeb里面,已经原生支持了 RestTemplate,只不过我们一般使用的是把请求URL直接写死,而不是通过服务名的形式来调用,但是在微服务架构中,因为有了注册中心的存在,我们的负载均衡可以不需要使用第三方软件或者硬件实现了,所有,我们最佳的方式是经过服务名访问,请求到那个实例,由 负载均衡策略来替我们决定。

使用 feign 需要加上一个 jar 包   负载均衡策略  默认是  轮询

在启动类(消费者)的 pom 文件

<!--使用openFeign-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

开始使用  openfeign

在启动类(消费者)上边写入开启使用的  @EnableFeignClients    注解

微服务之间的调用    写一个接口

在写一个 Controller  进行调用

进行访问

更改 OpenFeign 的默认策略  变为随机

加配置文件  --->   创建config

代码实现   随机策略

package com.aaa.config;

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;

public class LoadBalancerConfig {
    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); //loadbalancer.client.name
        // 对应的需要进行负载均衡的名字是什么     LoadBalancerClientFactory.PROPERTY_NAME
        System.out.println("======"+name);
        // product
        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}

在 启动类 (order 消费者) 里加入 注解

单个使用

@LoadBalancerClient(value = "product",configuration= LoadBalancerConfig.class)

多个使用

@LoadBalancerClients(

defaultConfiguration = LoadBalancerConfig.class

// product 会使用这个策略

// @LoadBalancerClient(value = "product",configuration= LoadBalancerConfig.class)

)

启动微服务 ,调用路径

服务熔断

写一个实现类    ProFeignImpl

package com.aaa.service;


import com.aaa.Product;
import org.springframework.stereotype.Service;

@Service
public class ProFeignImpl implements ProFeign {


    @Override
    public Product getProById(Integer id) {

        return new Product(0,"出错啦");
    }
}



然后在接口上写

开启 feign 对 sentinel 的支持

在消费者的 application.properties

重启服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机械能实验

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值