SpringCloudAlibaba+Dubbo
本文主要用来实现SpringCloud如何利用Dubbo(RPC框架)的高性能服务调用。
Dubbo的注册中心采用的是Zookeeper,而起初微服务的注册中心并不支持Zookeeper,那么怎么才能让SpringCloud支持Dubbo呢?
SpringCloudAlibaba出现了,它使用Nacos作为注册中心,具体使用参照:SpringBoot整合Nacos
下面说一下Nacos+Dubbo的实现(文末有项目Gitee地址)
首先启动nacos,具体参照:Windows安装Nacos单机&集群
创建maven父工程
nacos-dubbo-demo,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.qjc.demo</groupId> <artifactId>nacos-dubbo-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>nacos-dubbo-demo</name> <description>Demo project for Spring Boot</description> <packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> </parent> <modules> <module>nacos-dubbo-provider</module> <module>nacos-dubbo-api</module> <module>nacos-dubbo-consumer</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>1.8</java.version> <spring-boot.version>2.2.5.RELEASE</spring-boot.version> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> <version>${spring-cloud-alibaba.version}</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${spring-cloud-alibaba.version}</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>${spring-cloud-alibaba.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
创建api接口管理工程
nacos-dubbo-api,不需要导入依赖,创建接口
package com.qjc.demo.service; import java.util.List; import java.util.Map; public interface HelloProvider { String hello(String name); List<Map<String, String>> testMapList(Map<String, String> map); }
创建服务提供者
nacos-dubbo-provider,导入依赖
<dependencies> <dependency> <groupId>com.qjc.demo</groupId> <artifactId>nacos-dubbo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
创建配置文件bootstrap.yml
spring: application: name: nacos-dubbo-provider main: allow-bean-definition-overriding: true cloud: nacos: config: server-addr: 127.0.0.1:8848 discovery: enabled: true register-enabled: true server-addr: 127.0.0.1:8848
创建配置文件application.yml
server: port: 8801 dubbo: # Dubbo 服务注册中心配置 registry: # 其中子属性 address 的值 "spring-cloud://localhost",说明挂载到 Spring Cloud 注册中心 address: spring-cloud://localhost application: # qos=Quality of Service 是Dubbo的在线运维命令,可以对服务进行动态的配置、控制(上下线)及查询,具体参考:https://blog.csdn.net/u012988901/article/details/84503672 qos: enable: false # Dubbo 服务暴露的协议配置 protocol: # 协议名称 name: dubbo # 协议端口( -1 表示自增端口,从 20880 开始) port: -1 # 指定 Dubbo 服务实现类的扫描基准包 scan: base-packages: com.qjc.demo.service.impl
启动类加上@EnableDiscoveryClient
创建HelloProvider的实现类,并将其通过注解注册到注册中心
package com.qjc.demo.service.impl; import com.qjc.demo.service.HelloProvider; import org.apache.dubbo.config.annotation.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class HelloProviderImpl implements HelloProvider { @Override public String hello(String name) { return "hello! " + name; } @Override public List<Map<String, String>> testMapList(Map<String, String> map) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); list.add(map); Map<String, String> map2 = new HashMap<String, String>(); map2.put("key1", "value1"); map2.put("key2", "value2"); list.add(map2); return list; } }
创建服务消费者
nacos-dubbo-consumer,导入依赖
<dependencies> <dependency> <groupId>com.qjc.demo</groupId> <artifactId>nacos-dubbo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
创建配置文件bootstrap.yml
spring: application: name: nacos-dubboe-consumer main: allow-bean-definition-overriding: true cloud: nacos: config: server-addr: 127.0.0.1:8848 discovery: enabled: true register-enabled: true server-addr: 127.0.0.1:8848
创建配置文件application.yml
server: port: 8802 dubbo: # Dubbo 服务注册中心配置 registry: # 其中子属性 address 的值 "spring-cloud://localhost",说明挂载到 Spring Cloud 注册中心 address: spring-cloud://localhost application: # qos=Quality of Service 是Dubbo的在线运维命令,可以对服务进行动态的配置、控制(上下线)及查询,具体参考:https://blog.csdn.net/u012988901/article/details/84503672 qos: enable: false cloud: # 要订阅服务的服务名:及服务提供方的 spring.application.name的值,也就是服务提供方的应用名。 subscribed-services: nacos-dubbo-provider
启动类加上@EnableDiscoveryClient
引用Dubbo服务
package com.qjc.demo.controller; import com.qjc.demo.service.HelloProvider; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class HelloController { @Reference HelloProvider helloProvider; @GetMapping(value = "/api/hello") @ResponseBody public String index(@RequestParam("name") String name) { return helloProvider.hello(name); } @GetMapping(value = "/api/testMapList") @ResponseBody public List<Map<String, String>> testMapList() { Map<String, String> map = new HashMap<String, String>(); map.put("hello", "nacos-dubbo"); return helloProvider.testMapList(map); } }
Gitee项目地址:https://gitee.com/xiaorenwu_dashije/nacos-dubbo-demo.git
启动服务提供者和服务消费者,并查看注册中心:
然后测试消费者
响应如下:
表示整合成功,同时该接口也可以通过feign和ribbon调用
劈天造陆,开辟属于自己的天地!!!与君共勉
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步