文章目錄
一、架子搭建
環境:
本地:springboot-2.2.6 + jdk1.8 + dubbo-2.7.3
服務器: docker + zookeeper:latest
我們先新建一個空項目,然後分別引入
- api
- customer
- provider
三個模塊,以下,貼出api模塊構建過程:
1、新建空項目
2、創建api模塊
我們默認先引入web依賴
3、創建customer和provider模塊,過程同上,結構圖如下:
二、依賴引入
api模塊依賴不動,provider——>pom.xml:加入以下內容
<!--導入公共接口模塊-->
<dependency>
<groupId>com.test</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
customer——>pom.xml添加同上
三、properties配置
同樣的api不用動,customer模塊的配置如下:
#dubbo configuration
dubbo.application.name=consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://你的ip:2181
# provider使用8080
server.port=8081
provider模塊:
dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://你的ip:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 自動掃描
dubbo.scan.base-packages=com.test.provider.service
四、編寫測試
1、api編寫服務接口
package com.test.api.service;
/**
* 公共接口
*/
public interface TicketService {
public String getTicket();
}
2、provider編寫服務接口實現類
package com.test.provider.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.test.api.service.TicketService;
import org.springframework.stereotype.Component;
@Component
@Service(version = "1.0.0" ,interfaceClass = TicketService.class) // 將服務暴露
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "厲害了,我的國";
}
}
// 注意:@Service註解的import不是平時spring用的那個
3、customer獲取註冊的服務,並使用
package com.test.customer.controller;
import com.test.api.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
// 獲取服務
@Reference(version = "1.0.0")
private TicketService ticketService;
@GetMapping("/ticket")
public String hello(){
String ticket = ticketService.getTicket();
System.out.println("買到票了" + ticket);
return "success";
}
}
4、進行測試
- 將provider的主類運行起來,然後運行customer的主類:
- 在本地瀏覽器上輸入:
http://localhost:8081/ticket
,顯示如下:
同時查看控制檯打印:
五、踩坑
- 博主用的是阿里雲的服務器,需要添加zookeeper使用端口進安全組,這樣本機才能訪問,不然一直報連接超時,如果你用的虛擬機,需要打開此接口,直接點關閉防火牆
- zkclient和curator因爲dubbo版本原因可能有些不一樣,我沒太細看,乾脆全部加上
- 如果不想加一個api模塊,那就將接口和實現類寫在一起,但是這樣的話,比較麻煩,還需要將接口寫在customer裏面,而且路徑名稱等必須和provider的接口一樣,才能保證獲取服務