简介
搭建基于SpringcloudAlibaba的分布式框架,注册中心以及服务消费订阅采用的是中间件 Nacos作为实现,服务与服务之间的调用采用的是dubbo的rpc协议,各模块通过 Nacos进行统一的配置管理(通过Nacos做配置中心),当并发进行http接口调用时,则是采用中间件Sentinel进行服务限流以及服务降级,http请求响应数据则是从数据库 mysql 中获取,最后通过springcloud的插件gateway进行路由转发。本篇将略微有点长,请耐心看完。
项目地址
Nacos、Sentinel安装与简介
sentinel流控及降级持久化:建议把这篇文章看完再看持久化
工程搭建:
1:父工程及子工程
1、创建一个Maven项目作为父工程
src等没用的文件直接删除,只留关键的pom即可
2、创建子工程(maven工程)alibaba-module、alibaba-server、alibaba-common
src等没用的文件直接删除,只留关键的pom即可
3、alibaba-module--Pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>SpringCloudAlibaba-practice</artifactId>
<groupId>com.jingshang</groupId>
<version>1.0</version>
</parent>
<artifactId>alibaba-module</artifactId>
<packaging>pom</packaging>
<description>module模块</description>
<modules>
<module>admin-user-biz</module>
<module>admin-user-api</module>
<module>admin-role-api</module>
<module>admin-role-biz</module>
</modules>
</project>
alibaba-module子工程:我用它来管理api接口、http接口
4、alibaba-server--Pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jingshang</groupId>
<artifactId>alibaba-server</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>alibaba-gateway-server</module>
</modules>
</project>
alibaba-server子工程:我用它来管理路由转发、服务降级、限流等功能模块
5、alibaba-common--Pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>SpringCloudAlibaba-practice</artifactId>
<groupId>com.jingshang</groupId>
<version>1.0</version>
</parent>
<artifactId>alibaba-common</artifactId>
<packaging>pom</packaging>
<description>common模块</description>
<modules>
<module>common-core</module>
<module>common-code-generation</module>
</modules>
</project>
alibaba-common子工程:我通常用来整合安全框架、代码生成等公共功能模块
2:整合Nacos注册中心、服务提供者、配置中心。整合sentinel
服务提供者
在alibaba-module工程中中创建 admin-user-api、admin-user-biz等子工程
说明:api为对外开放的接口、biz为http接口,通俗的讲就是postman可调用的接口。远程调用我是用的dubbo的rpc协议来替代feign和ribbon
1、创建 admin-user-api 模块:右键alibaba-module->new->module->创建maven项目
构建Pom:pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>alibaba-module</artifactId>
<groupId>com.jingshang</groupId>
<version>1.0</version>
</parent>
<artifactId>admin-user-api</artifactId>
<packaging>jar</packaging>
<description>user模块</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
</project>
2、创建 admin-user-biz 模块:右键alibaba-module->new->module->创建springboot项目
构建Pom:pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jingshang</groupId>
<artifactId>admin-user-biz</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- 引入Api -->
<dependency>
<groupId>com.jingshang</groupId>
<artifactId>admin-user-api</artifactId>
<version>1.0</version>
</dependency>
<!-- 公共Api-->
<dependency>
<groupId>com.jingshang</groupId>
<artifactId>common-core</artifactId>
<version>1.0</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- 必须包含spring-boot-starter-actuator包,不然启动会报错。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- web 应用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置中心所需jar包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 整合的dubbo -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- 整合的nacos -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- sentinel -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
<!-- junit 测试所需的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties配置
spring.application.name=admin-user-biz
server.port=8001
# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=10.10.10.244:8888
#nacos 注册中心
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=dddf9ef6-638a-42fa-9b82-9c61a944f6cc
#spring.cloud.nacos.discovery.cluster‐name=DEFAULT_GROUP
# dubbo 服务
dubbo.scan.base-packages=com.jingshang.adminuserbiz.service
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.registry.address=spring-cloud://localhost
#订阅 (意思是调用哪个web服务的接口)
#dubbo.cloud.subscribed-services=admin-user-biz
#mysql日志
logging.level.com.jingshang.adminuserbiz.dao=debug
注:mysql配置到了nacos中,application.properties中就不再重复写mysql的连接了,如何将mysql配置到nacos中请继续往下看
说明:application.properties中配置了nacos注册中心、sentinel流量防卫兵等基本配置、rpc远程调用协议【dubbo】
重点:当你配置了dubbo之后,Service层的注解要使用 dubbo的@Service注解,当你非要使用 @org.springframework.stereotype.Service的 @Service注解时,请一定保证当前服务没有被其他服务远程调用。否则调用此服务的服务消费者启动时将会抛出【No provider available for the service 】 翻译过来就是:没有提供该服务的提供商
2.1、构建nacos配置中心
①登录:默认账号密码都是 nacos。地址:http://localhost:8848/nacos
②进去后选择:【服务管理】-->【命名空间】-->【点击右上角:新建命名空间】
效果图:
④新增配置信息:选择列表页的 【配置管理】-->【选择上方刚创建的dev命名空间】-->【点击右上方的 + 号】Id、group、配置内容为必填信息。 配合格式我springboot项目中用的是properties,所以这里选properties就可以了,主要是和代码的配置文件后缀保持一致即可
我这里只配了 数据库,各位小伙伴根据自己实际情况做配置
⑤bootstrap.properties拉取配置中心信息的配置
#配置中心
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.prefix=alibaba-admin-database
spring.cloud.nacos.config.group=DEFAULT_DATABASE
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.namespace=dddf9ef6-638a-42fa-9b82-9c61a944f6cc
# 修改nacos日志打印级别,不修改的话,配置信息一直刷新
logging.level.com.alibaba.nacos:warn
yaml格式
logging:
level:
com:
alibaba:
nacos: warn
spring:
cloud:
nacos:
config:
file-extension: properties
group: DEFAULT_DATABASE
namespace: dddf9ef6-638a-42fa-9b82-9c61a944f6cc
prefix: alibaba-admin-database
server-addr: localhost:8848
bootstrap.properties的属性与nacos的对应关系
说明:为什么这里要创建两个配置文件,为什么不直接在application.properties中配置所有所需信息呢。这是因为nacos做配置中心的时候,默认支持的是bootstrap,而不是application,不这么做的话, 你的配置就算写的再好,也不会将其放到nacos中做配置中心的,而且会导致启动找不到配置而报错
重点:bootstrap.properties通过namespace【namespace的指向是命名空间,如果不写的话,默认去找public命名空间,但是这样的话,配置就找不到了(我们在配置中心配置的数据库信息)】和prefix【prefix它指定的配置的Id】,通过这两个属性,使得配置文件 能精准的找到属于我们自己的配置信息
⑥nacos多配制
前提:需要有一个默认配置,该默认配置需要指定【命名空间:namespace、nacos地址:server-addr】
多配制:当你需要从nacos配置中心拉取多个配置时,应该在bootstrap.properties配置文件中配置【data-id、group】如下图圈红的位置
⑦ 如需多配制请在bootstrap.properties中这么写:
spring.cloud.nacos.config.ext-config[0].data-id=alibaba-admin-database.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_DATABASE
yaml格式
spring:
cloud:
nacos:
config:
ext-config:
- data-id: alibaba-admin-database.properties
group: DEFAULT_DATABASE
重点:值得注意的是data-id 一定要加扩展名,当你不加它的时候,系统还是会提醒你,让你选择一个合适的扩展名,至于为什么系统会这么贴心的告诉你呢? 那是因为它报错给我们了 【 报错信息:must contains file extension with properties|yaml|yml 】
误区:ext-config[0]我当时在想为什么是【0】,如果没有【0】的情况下,我可不可以直接写【1】百思不得其解,但是当我看到源码的时候我才突然恍然大悟
/**
* 一组扩展配置
*/
private List<Config> extConfig;
这个配置的容器是List,而List索引必须从0开始,所以当你需要多配制的时候,要从0开始,然后才是1、2、3
配置好后启动查看控制台日志输出,如下图:加载了两个配置
⑧启动类添加注解
@MapperScan(basePackages = {"com.jingshang.adminuserbiz.dao"})
@EnableDiscoveryClient//将服务注册到注册中心
@SpringBootApplication
public class AdminUserBizApplication {
public static void main(String[] args) {
SpringApplication.run(AdminUserBizApplication.class, args);
}
}
2.1:编写http接口、并进行流控及降级
①Mapper层省略、写sql语句的时候,启动类记得扫描哟或者在Mapper层加注解
②Service层:接口写在 admin-user-api 里面,如下图
接口方法:String findByName(Integer id); id查询返回名称,这方法名起的不咋地,能懂意思就行哈,不要太在意我起的名字
③Service实现类:该实现类放在 admin-user-biz 里面。如下图。如果不明白api、zip的区别,请往上看,上面有说明。
④接口方法:
@Slf4j
@Service
public class UserServiceImpl implements UserDubboService {
@Resource
private UserDao sysUserDao;
@SentinelResource(value = "user/findByName", blockHandler = "exceptionHandler")
@Override
public String findByName(Integer id) {
return sysUserDao.findByName(id);
}
}
重点:
1、@Service注解使用 dubbo的注解,且一定要实现接口
2、@SentinelResource它是sentinel的注解(用于服务限流、降级、服务熔断)
用于定义资源,并提供可选的异常处理和 fallback 配置项。
@SentinelResource 注解包含以下属性:
value:资源名称,必需项(不能为空)
entryType:entry 类型,可选项(默认为EntryType.OUT)
blockHandler(命名块的异常功能) 、 blockHandlerClass (指定自定义限流及降级的类)
3、Sentinel限流、降级的使用
一:流控
①先请求接口,因为只有请求完接口后,sentinel的簇点链路才有该路径,才可以进行限流
②打开sentinel 簇点链路->列表视图->找到刚调用的接口地址->点击流控
QPS:点击数
单机阈值:单位时间内QPS和线程数的数量
线程数:跟QPS很像,理解直观意思即可
关联:比如A接口地址为资源名、B接口地址为关联的资源名,当A接口限流后,B接口也会被限流
Warm Up:预热模式,该加载因子默认是3,意思是当QPS(点击数)设置每秒10次,warm up设置5秒,那就是在5秒内处于预热模式。每秒的并发是 QPS/加载因子、10/3 ,也就是说在预热模式内(warm up = 5秒)并发最多是3,当大于3的时候就会进行流量控制
排队等候:这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态, 我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。
注意:匀速排队模式暂时不支持 QPS > 1000 的场景。
注意 :自定义的流量控制异常请参考上面接口实现类里的方法
二:降级
①先请求接口,因为只有请求完接口后,sentinel的簇点链路才有该路径,才可以进行降级
②打开sentinel 簇点链路->列表视图->找到刚调用的接口地址->点击降级
注意:降级规则1.8之后更新了策略
RT:平均响应时间,当rt设置为200毫秒时则表示,单位时间内的的请求平均响应时间必须在200毫秒以内完成,若超出则会触发降级
时间窗口:被降级后的资源将在时间窗口后恢复正常
异常比例:单位时间内的请求,当报错达到一定比例后服务将会自动降级(例:每秒请求10次,异常比例设置为20%,那么10次请求中报错超过3次,报错就会 超过20%,一旦超过,sentinel就会进行服务熔断)
异常数:这个相对于前两个就比较好理解一些了,直接设置好报错的次数,当报错次数超过设置的异常数时,就会自动降级
注意 :自定义的服务降级异常请参考上面接口实现类里的方法,与流控的自定义异常写法可以保持一致,关键点在sentinel Dashbord对于该资源是设置了限流还是降级
2.2 服务消费者
服务消费者
1、创建 admin-role-api 模块:右键alibaba-module->new->module->创建maven项目
构建Pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>alibaba-module</artifactId>
<groupId>com.jingshang</groupId>
<version>1.0</version>
</parent>
<artifactId>admin-role-api</artifactId>
<packaging>jar</packaging>
<description>role模块</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
</project>
2、创建 admin-role-biz 模块:右键alibaba-module->new->module->创建springboot项目
构建Pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jingshang</groupId>
<artifactId>admin-role-biz</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- 引入Api -->
<dependency>
<groupId>com.jingshang</groupId>
<artifactId>admin-role-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.jingshang</groupId>
<artifactId>admin-user-api</artifactId>
<version>1.0</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- 必须包含spring-boot-starter-actuator包,不然启动会报错。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- web 应用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 整合的dubbo -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- 整合的nacos -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心所需jar包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- sentinel -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
<!-- junit 测试所需的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties基本配置
spring.application.name=admin-role-biz
server.port=8002
# sentinel dashboard (限流、熔断降级)
spring.cloud.sentinel.transport.dashboard=10.10.10.244:8888
#nacos 注册中心
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=dddf9ef6-638a-42fa-9b82-9c61a944f6cc
# dubbo 服务
#dubbo.scan.base-packages=com.jingshang.adminrolebiz.service
dubbo.protocol.name=dubbo
dubbo.protocol.port=20882
dubbo.registry.address=spring-cloud://localhost
#订阅 (意思是调用哪个web服务的接口)
dubbo.cloud.subscribed-services=admin-user-biz
#mysql日志
logging.level.com.jingshang.adminrolebiz.dao=debug
bootstrap.properties拉取配置中心的配置,这里跟服务提供者保持一致,都是拉取的同一个数据库的配置,这里就不重新粘贴代码了,小伙伴可直接复制服务提供者的bootstrap.properties中的配置,我这里只在nacos中配置了数据库,其他配置根据小伙伴们的个人需求进行编写
启动类添加@EnableDiscoveryClient注解
注:搭建消费者的方法与提供者步骤相同,这里不再赘述
3、消费提供者提供的方法
serviceImpl
package com.jingshang.adminrolebiz.service;
import com.jingshang.adminuserapi.dubbo.UserDubboService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
/**
* @Author: 王文龙
* @Date: 2020/9/914:21
* @Version: 1.0
* @Describe: 描述:
*/
@Component
public class RoleServiceImpl {
@Reference
UserDubboService dubboService;//dubbo服务
public String findByName(Integer id) {
return dubboService.findByName(id);
}
}
注入服务提供者时,要使用dubbo的@Reference注解,我个人远程调用是用的dubbo的rpc协议,如果远程调用使用的的feign的话就另当别论了
注:因为我这里没有实现接口,所以不需要@Service注解,但需要 @Component注解,而且application.properties也不可以让dubbo去扫描service包,在你妹使用dubbo的@Service注解的时候,配置里去扫描service包是会报错的,所以这里注意一下
controller
package com.jingshang.adminrolebiz.controller;
import com.jingshang.adminrolebiz.service.RoleServiceImpl;
import com.jingshang.adminuserapi.dubbo.UserDubboService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Author: 王文龙
* @Date: 2020/9/914:25
* @Version: 1.0
* @Describe: 描述:
*/
@RestController
@RequestMapping("/role")
public class RoleController {
@Resource
private RoleServiceImpl roleService;
@RequestMapping("/findByName")
public String findByName(Integer id) {
return roleService.findByName(id);
}
}
5、PostMan调用接口
!!!! 关于服务注册、订阅、配置、限流、降级就到此结束了