搞了大半天,終於趟平了。
本文中主要是基於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
第五步,啓動服務並測試調用