文章目录
- 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();
}
}