搞了大半天,终于趟平了。
本文中主要是基于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中增加 <packaging>pom</packaging>
删除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服务的注解,表示当前服务会发布为一个远程服务
@DubboService
public 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=provider
dubbo.scan.base-packages=cn.guoxiaolong.dubbo
dubbo.protocol.name=dubbo
dubbo.protocol.port=20882
dubbo.protocol.host=100.149.40.112
dubbo.registry.address=spring-cloud://localhost
spring.cloud.nacos.discovery.server-addr=100.149.40.112:8848
其中spring.cloud.nacos.discovery.server-addr 为注册中心地址,这里我单机启动的注册中心(参考:Nacos快速开始安装使用),也可以采用高可用部署(基于Nacos实现高可用服务注册中心部署)
第四步,创建启动类并启动服务
@SpringBootApplication
public 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服务。
@RestController
public 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=consumer
dubbo.scan.base-packages=cn.guoxiaolong.dubbo
dubbo.protocol.name=dubbo
dubbo.protocol.port=20883
dubbo.protocol.host=100.149.40.112
dubbo.registry.address=spring-cloud://localhost
spring.cloud.nacos.discovery.server-addr=100.149.40.112:8848
第五步,启动服务并测试调用