文章目录
- 1.基本介绍
 - 1.概述
 - 2.Nacos下载和运行(java8/maven3.2.x+)
 - 1.解压到没有中文路径的
 - 2.双击startup
 - 3.浏览器输入http://192.168.242.124:8848/nacos
 - 4.用户名和密码为nacos
 - 5.cmd输入netstat -anb | more查看监听端口
 
- 2.创建Nacos服务提供者 10004
 - 1.项目架构
 - 2.步骤说明
 - 3.创建模块 member-service-nacos-provider-10004 作为服务提供者
 - 4.父项目pom.xml指定依赖版本
 - 5.本模块pom.xml 引入依赖,nacos的服务发现
 - 6.参考10001模块来构建
 - 1.到10001模块复制main目录下的所有文件夹
 - 2.粘贴到10004模块的main目录下
 - 3.修改application.yml,并注册到nacos
 - 4.重新创建主启动类,开启nacos服务发现
 - 5.修改controller,更好的显示信息
 
- 7.测试
 - 1.确保启动了nacos(startup)
 - 2.启动10004微服务模块,http://localhost:8848/nacos 查看注册情况
 - 3.浏览器测试这个服务提供者
 
- 3.创建Nacos服务提供者集群 10006
 - 1.创建与10004模块功能相同的子模块 member-service-nacos-provider-10006
 - 2.pom.xml 将10004模块的依赖复制过来
 - 3.复制10004模块的main目录下的文件夹并粘贴到10006
 - 4.修改application.yml的服务端口和服务名称
 - 5.修改10004模块的服务名称
 - 6.修改主启动类的名称
 - 7.修改controller,显示信息
 - 8.测试
 - 1.首先保证nacos8848是启动的
 - 2.启动10006和10004微服务
 - 3.浏览器输入 http://localhost:8848/nacos/ 查看注册状态
 - 4.postman测试
 
- 4.创建nacos服务消费方
 - 1.架构图
 - 2.创建服务消费模块 member-service-nacos-consumer-81
 - 3.pom.xml 引入依赖,主要是nacos的服务发现依赖
 - 4.application.yml 配置nacos的服务注册
 - 5.编写启动类,开启nacos服务发现
 - 6.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate,并且赋予负载均衡的能力
 - 7.使用RestTemplate进行远程调用的流程
 - 8.编写controller进行远程调用(详细步骤)
 - 1.获取两个服务的名字 member-service-nacos-provider
 - 2.com/sun/springcloud/controller/MemberNacosConsumerController.java
 - 1.controller类的注解跟要远程调用的注解保持一致
 - 2.依赖注入RestTemplate进行远程调用
 - 3.声明服务发现的前缀
 - 4.先将要调用的方法直接粘贴过来,删除方法体
 - 5.使用RestTemplate进行远程调用
 - 6.可以修改请求这个方法的url(其实也只有这个地方才可以修改了,其他的直接粘贴即可)
 - 7.完整源代码
 - 8.增加远程调用
 
- 9.测试
 - 1.启动两个服务提供集群10004和10006以及刚才的服务消费方81模块
 - 2. 查看服务注册情况
 - 3.postman测试服务消费方的远程调用
 
- 5.Ribbon配置负载均衡算法
 - 1.com/sun/springcloud/config/RibbonRule.java 配置类直接注入一个负载均衡算法对象
 
1.基本介绍
1.概述

2.Nacos下载和运行(java8/maven3.2.x+)
1.解压到没有中文路径的

2.双击startup

3.浏览器输入http://192.168.242.124:8848/nacos


4.用户名和密码为nacos

5.cmd输入netstat -anb | more查看监听端口

2.创建Nacos服务提供者 10004
1.项目架构

2.步骤说明

3.创建模块 member-service-nacos-provider-10004 作为服务提供者

4.父项目pom.xml指定依赖版本

5.本模块pom.xml 引入依赖,nacos的服务发现
    <dependencies>
        <!--引入nacos的服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- springboot web starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
        </dependency>
        <!--
        1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息
        等
        2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!-- 这里我们重新指定一下 version 因为父项目中没有对这个依赖进行版本仲裁-->
            <version>1.1.13</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
 
6.参考10001模块来构建
1.到10001模块复制main目录下的所有文件夹

2.粘贴到10004模块的main目录下

3.修改application.yml,并注册到nacos
server:
  port: 10004 # 配置服务端口
spring:
  application:
    name: member-service-nacos-provider-10004 # 配置服务的名称,名字任意这里与项目名保持一致
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    # 别忘记创建数据库之后修改数据库名称
    url: 
    username: 
    password: 
# 配置naocs
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 配置nacos的地址
# 暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: "*"
mybatis:
  mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xml
  type-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识
 
4.重新创建主启动类,开启nacos服务发现
package com.sun.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootApplication
@EnableDiscoveryClient // 开启nacos服务发现
public class MemberNacosProviderApplication10004 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosProviderApplication10004.class, args);
    }
}
 
5.修改controller,更好的显示信息

7.测试
1.确保启动了nacos(startup)


2.启动10004微服务模块,http://localhost:8848/nacos 查看注册情况



3.浏览器测试这个服务提供者

3.创建Nacos服务提供者集群 10006
1.创建与10004模块功能相同的子模块 member-service-nacos-provider-10006

2.pom.xml 将10004模块的依赖复制过来
    <dependencies>
        <!--引入nacos 的服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- springboot web starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
        </dependency>
        <!--
        1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息
        等
        2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!-- 这里我们重新指定一下 version 因为父项目中没有对这个依赖进行版本仲裁-->
            <version>1.1.13</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
 
3.复制10004模块的main目录下的文件夹并粘贴到10006


4.修改application.yml的服务端口和服务名称
server:
  port: 10006 # 配置服务端口
spring:6
  application:
    name: member-service-nacos-provider # 配置服务的名称
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    # 别忘记创建数据库之后修改数据库名称
    url:
    username: 
    password: 
# 配置naocs
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 配置nacos的地址
# 暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: "*"
mybatis:
  mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xml
  type-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识
 
5.修改10004模块的服务名称
- 因为两个模块的功能是相同的,只是做成了一个集群,所以名字需要相同
 

6.修改主启动类的名称

7.修改controller,显示信息

8.测试
1.首先保证nacos8848是启动的
2.启动10006和10004微服务

3.浏览器输入 http://localhost:8848/nacos/ 查看注册状态


4.postman测试

4.创建nacos服务消费方
1.架构图

2.创建服务消费模块 member-service-nacos-consumer-81

3.pom.xml 引入依赖,主要是nacos的服务发现依赖
    <dependencies>
        <!--引入nacos的服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- springboot web starter 用来监听端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
        </dependency>
        <!--
        1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息
        等
        2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 公共模块的jar包 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
 
4.application.yml 配置nacos的服务注册
server:
  port: 81
spring:
  application:
    name: member-service-nacos-consumer-81
# 配置nacos的服务注册
  cloud:
      nacos:
        discovery:
          server-addr: localhost:8848 # 配置要注册到的nacos地址,根据实际情况填写
 
5.编写启动类,开启nacos服务发现
package com.sun.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootApplication // springboot启动类
@EnableDiscoveryClient // 开启nacos服务发现
public class MemberNacosCostomerApplication81 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosCostomerApplication81.class, args);
    }
}
 
6.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate,并且赋予负载均衡的能力
package com.sun.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
 * 配置类注入RestTemplate,并且赋予负载均衡的能力
 *
 * @author 孙显圣
 * @version 1.0
 */
@Configuration // 标识这是一个配置类
public class CustomizationBean {
    @Bean
    @LoadBalanced // 赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
 
7.使用RestTemplate进行远程调用的流程
- pom.xml 配置nacos的服务发现依赖
 - application.yml 配置nacos的服务注册
 - 启动类开启nacos的服务发现
 - 配置类配置RestTemplate和负载均衡算法
 - 编写远程调用的controller 
  
- 复制要调用controller上面的注解
 - 注入RestTemplate 用作远程调用
 - 获取要远程调用的 application name
 - 根据 application name声明服务发现的前缀http://application name (这个可以找到远程调用的上下文路径)
 - 服务发现(使用声明的服务发现前缀) + 目标接口路径 进行拼接即可访问目标接口,Ribbon负载均衡算法
 - 使用RestTemplate进行远程调用
 
 
8.编写controller进行远程调用(详细步骤)
1.获取两个服务的名字 member-service-nacos-provider

2.com/sun/springcloud/controller/MemberNacosConsumerController.java
1.controller类的注解跟要远程调用的注解保持一致

2.依赖注入RestTemplate进行远程调用

3.声明服务发现的前缀
- 这里需要注意:服务发现的只是ip+端口+上下文路径,并不包括协议
 

4.先将要调用的方法直接粘贴过来,删除方法体

5.使用RestTemplate进行远程调用

6.可以修改请求这个方法的url(其实也只有这个地方才可以修改了,其他的直接粘贴即可)

7.完整源代码
package com.sun.springcloud.controller;
import com.sun.springcloud.entity.Member;
import com.sun.springcloud.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
 * @author 孙显圣
 * @version 1.0
 * @Description: 远程调用MemberController的控制器
 */
@RestController // controller注解跟要调用的服务的controller一样
@Slf4j
public class MemberNacosConsumerController {
    // 注入restTemplate 进行远程调用
    @Resource
    private RestTemplate restTemplate;
    // 声明服务发现的前缀
    // 服务发现的的是ip+端口+上下文路径
    public static final String MEMBER_SERVICE_PROVIDER_URL = "http://member-service-nacos-provider";
    // 远程调用MemberController的save方法
    @PostMapping("/member/nacos/consumer/save")
    public Result save(@RequestBody Member member) {
        // 远程调用member-service-nacos-provider的save方法
        return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);
    }
}
 
8.增加远程调用
- 直接将要调用的方法粘贴过来,然后使用copliot直接tab即可
 - 如果想修改,就修改一下url
 
    @GetMapping("/member/nacos/consumer/get/{id}") // 这里使用的路径参数
    public Result getMemberById(@PathVariable("id") Long id) {
        // 远程调用member-service-nacos-provider的getMemberById方法
        return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);
    }
 
9.测试
1.启动两个服务提供集群10004和10006以及刚才的服务消费方81模块

2. 查看服务注册情况
浏览器输入:http://192.168.242.124:8848/nacos/index.html

3.postman测试服务消费方的远程调用


5.Ribbon配置负载均衡算法
1.com/sun/springcloud/config/RibbonRule.java 配置类直接注入一个负载均衡算法对象
package com.sun.springcloud.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/** 配置类,用于配置Ribbon的负载均衡策略
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
public class RibbonRule {
    @Bean
    public IRule ribbonRule() {
        // 随机策略
        return new RandomRule();
    }
}
                


















