搞了大半天,终于趟平了。
本文中主要是基于Dubbo实现了服务提供和调用的demo,并接入Nacos注册中心。
Dubbo Spring Cloud 是Spring Cloud Alibaba 的核心组件,它构建在原生的Spring Cloud 标准之上,不仅覆盖了Spring Cloud原生特性,还提供了更加稳定和成熟的实现。接下来,就让我们一步一步揭开它的神秘面纱。
话不多说直接上代码。
版本选择
Spring Cloud Version : Hoxton.SR9
Spring Cloud Alibaba Version : 2.2.6.RELEASE
Spring Boot Version : 2.3.2.RELEASE
(重要)版本一定要匹配,不然一堆报错搞的烦死了
实现Dubbo服务提供方
1、创建一个父工程 dubbo-demo
pom.xml中增加 pom
删除src文件夹
2、创建provider-api模块
这是一个普通的maven工程,在其中创建接口,并执行mvn install 将jar包安装到本地仓库
/** * 服务提供者接口 */public interface HelloService { /** * 定义接口,传入名字,打招呼 * @param name * @return */ String hello(String name);}
3、创建provider模块
第一步,这是一个spring boot工程,添加依赖
<dependencies> <dependency> <groupId>cn.guoxiaolong</groupId> <artifactId>provider-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> <version>${spring.cloud.alibaba.version}</version> </dependency> <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-discovery</artifactId> <version>${spring.cloud.alibaba.version}</version> </dependency> </dependencies>
依赖说明如下:
provider-api :api接口声明
spring-cloud-starter:Spring Cloud核心包
spring-cloud-starter-dubbo:引入Spring Cloud Alibaba Dubbo
spring-cloud-starter-alibaba-nacos-discovery:基于nacos实现服务注册发现的artifactId
第二步,创建接口的实现类HelloServiceImpl,其中@DubboService是Dubbo服务的注解,表示当前服务会发布为一个远程服务
@DubboServicepublic class HelloServiceImpl implements HelloService {
private static final Logger logger = LoggerFactory.getLogger(HelloServiceImpl.class);
@Override public String hello(String name) { logger.info("service impl param:{}",name); return "Hello," + name + " welcome to AlwaysBeCoding!"; }}
第三步,在application.properties中配置dubbo相关信息
spring.application.name=providerdubbo.scan.base-packages=cn.guoxiaolong.dubbodubbo.protocol.name=dubbodubbo.protocol.port=20882dubbo.protocol.host=100.149.40.112dubbo.registry.address=spring-cloud://localhostspring.cloud.nacos.discovery.server-addr=100.149.40.112:8848
其中spring.cloud.nacos.discovery.server-addr 为注册中心地址,这里我单机启动的注册中心(参考:Nacos快速开始安装使用),也可以采用高可用部署(基于Nacos实现高可用服务注册中心部署)
第四步,创建启动类并启动服务
@SpringBootApplicationpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class,args); }}
查看注册中心,服务已经注册上去了
实现Dubbo服务调用方
1、创建一个consumer的spring boot项目
第一步,增加web依赖,其他与服务提供方一致
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version></dependency>
第二步,创建HelloController类,暴露一个hello服务,来消费Dubbo服务提供者的HelloService服务。
@RestControllerpublic class HelloController {
private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
@DubboReference private HelloService helloService;
@GetMapping("/hello") public String hello(String name){ logger.info("controller param:{}"+name); String result = helloService.hello(name); logger.info("controller result:{}",result); return result; }}
第三步,创建启动类
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class,args); }}
第四步,在application.properties中配置dubbo相关信息
spring.application.name=consumerdubbo.scan.base-packages=cn.guoxiaolong.dubbodubbo.protocol.name=dubbodubbo.protocol.port=20883dubbo.protocol.host=100.149.40.112dubbo.registry.address=spring-cloud://localhostspring.cloud.nacos.discovery.server-addr=100.149.40.112:8848
第五步,启动服务并测试调用