文章目錄
- 實作生產者
- 實作一個消費者
- 測驗
- 總體實作思路是啟動一個生產者專案注冊, 將所含服務注冊到zookeeper的注冊中心, 然后在啟動一個消費者專案,將所需服務向zookeeper注冊中心進行訂閱, 等待注冊中心的通知
- 注冊中心基于負載均衡演算法給消費者匹配到合適的生產者主機,然后通知消費者可以使用
實作生產者
- 匯入zookeeper依賴包
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zookeeper的包-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入zookeeper -->
<!--【新版的坑】zookeeper及其依賴包,解決日志沖突,還需要剔除日志依賴-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除這個slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
- 配置服務名字, 注冊中心地址, 掃描被注冊的包
server.port=8081
#當前應用名字
dubbo.application.name=provider-server
#注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#掃描指定包下服務
dubbo.scan.base-packages=com.demo.service
- 實作一個介面,在介面中完成需求
public interface Translate {
String translate(String str);
}
package com.demo.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Service //使用Dubbo的Service注解,告訴Dubbo這是一個服務
@Component //使用component告訴SpringBoot這是一個組件, 不使用@Service是因為zookeeper避免和zookeeper混淆
public class TranslateImpl implements Translate {
@Override
public String translate(String str) {
if (str == null) return null;
if ("pig".equalsIgnoreCase(str)) return "豬";
if ("dog".equalsIgnoreCase(str)) return "狗";
return "找不到";
}
}
實作一個消費者
-
匯入依賴, 和生產者的依賴是相同的
-
配置服務名字,注冊中心地址
server.port=8082
# 配置zookeeper
# 配置服務名字
dubbo.application.name=consumer.server
# 配置注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
- 本來正常步驟是需要將服務提供者的介面打包,然后用pom檔案匯入,我們這里使用簡單的方式,直接將服務的介面拿過來,路徑必須保證正確,即和服務提供者相同

- 實作獲取翻譯服務
package com.demo.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service //使用Spring的Service添加組件
public class Translation {
@Reference //遠程參考指定的服務,他會按照全類名進行匹配,看誰給注冊中心注冊了這個全類名
private Translate translate;
public String getTranslation(String str) {
return translate.translate(str);
}
}
- 實作controller
@RestController
public class TranslateController {
@Autowired
Translation translation;
@RequestMapping("/tran/{str}")
public String tran(@PathVariable("str")String str) {
return translation.getTranslation(str);
}
}
測驗
- 首先啟動zookeeper服務器和dubbo進入到監控頁面中

- 切記不要關閉服務器和dubbo
- 開啟生產者這個springboot專案

- 上圖顯示就是生產者注冊成功, 我們可以點擊ip查看詳情

- 啟動消費者這個springboot專案


- 訪問地址, 但是要注意我們消費者的tomcat啟動埠已經換成8082

- 翻譯成功
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225846.html
標籤:java
上一篇:W10系統配置java環境變數
