文章目錄
- 前言
- 下載zookeeper
- 解壓
- 修改組態檔
- 啟動zookeeper
- 下載dubboAdmin
- 解壓dubbo-admin-develop.zip
- 修改配置
- mvn打包
- 啟動dubbo-admin服務器
- 登錄dubbo-admin
- 使用dubbo
- 簡單構建
- 負載均衡
前言
博主使用了虛擬機搭建了zookeeper集群,但是dubboAdmin在宿主機運行,無法連接到虛擬機里面的zookeeper集群,配置了防火墻也沒用,但在宿主機上搭建zookeeper服務器,可以秒連接,可能是由于dubboAdmin設定了連接超時,如果dubboAdmin無法連接zookeeper就無法啟動,所以這里是在window環境下使用zookeeper,如果想看linux如何搭建zookeeper集群可以看我這篇文章 Linux 從零開始部署zookeeper集群遇到的問題
下載zookeeper
在瀏覽器運行如下地址就可以下載apache-zookeeper-3.7.0-bin.tar.gz包了
https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
解壓
下載后就是解壓了,windows解壓使用專門的解壓軟體即可如WinRAR,解壓后得到如下檔案夾

修改組態檔
將conf檔案夾下的zoo_sample.cfg名稱修改為zoo.cfg,并修改其內容,將dataDir改為如下,其他就無須改變了
dataDir=E:\apache-zookeeper-3.7.0-bin\data
啟動zookeeper
最好下個git,這樣右鍵后就有git bush命令列工具了,如果沒有下載使用window命令列也可以,window鍵+R出現運行,然后輸入cmd回車,如下

cd E:\apache-zookeeper-3.7.0-bin
cd bin
./zkServer.cmd
出現如下情況,則啟動成功

下載dubboAdmin
進入網址https://gitcode.net/mirrors/apache/dubbo-admin,點克隆下載zip檔案,得到dubbo-admin-develop.zip,這是新版的dubboAdmin,老版本的dubboAdmin打包成war需要部署在tomcat服務器中,然后我試過很多版本的tomcat都無法配置成功

解壓dubbo-admin-develop.zip
得到如下檔案夾

修改配置
打開如下路徑dubbo-admin-develop\dubbo-admin-server\src\main\resources下的application.properties,修改其配置,修改埠即可,其他不用變,因為windows下的zookeeper會占用8080埠,而dubbo-admin-develop默認啟動埠為8080,下面就是zookeeper服務器的地址,如果是虛擬機將127.0.0.1改為虛擬機中運行ifconfig顯示的ip地址,但是很有可能連接不上

mvn打包
使用mvn必須安裝maven并配置好mvn環境變數,使用dubbo必須有jdk,在dubbo-admin-develop目錄下運行mvn package -Dmaven.test.skip=true,打包的時候可能會出現問題,因為需要安裝node,此時會卡住,但是沒關系,解決方法就是關閉命令列,重新運行如下命令打包即可
mvn package -Dmaven.test.skip=true

打包成功出現如下資訊

啟動dubbo-admin服務器
將命令列移動到dubbo-admin-develop\dubbo-admin-server\target目錄下,執行如下代碼,注意dubbo-admin-server-0.4.0.jar名稱以你自己的電腦上名字為準,因為以后可能版本不同
java -jar dubbo-admin-server-0.4.0.jar
出現如下資訊,且沒有報錯則啟動成功

登錄dubbo-admin
輸入http://localhost:8081/就會默認跳轉到登錄界面,默認登錄的賬戶是root密碼是root,如果不對則在dubbo-admin-develop\dubbo-admin-server\src\main\resources下的application.properties這個組態檔查看,如下配置就是決定賬號和密碼


登錄成功出現如下界面,表示dubboAdmin啟動成功

使用dubbo
簡單構建
按照如下目錄結構創建,且只有6個檔案有內容,在下面會一一列出

pmx.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lolxxs</groupId>
<artifactId>springboot_dubbo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 整合dubbo -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<!-- zookeeper客戶端 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.7</version>
</dependency>
</dependencies>
</project>
DubboApplication.java
package com.lolxxs;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboApplication {
public static void main(String[] args) {
SpringApplication.run(DubboApplication.class);
}
}
TestService.java
package com.lolxxs.service;
public interface TestService {
String testDubbo();
}
TestService.java
package com.lolxxs.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.dubbo.rpc.RpcContext;
import com.lolxxs.service.TestService;
@Service(version = "1.0.0", timeout = 3000)
public class TestServiceImpl implements TestService {
@Override
public String testDubbo() {
System.out.println("呼叫了");
return "遠程地址"+ RpcContext.getContext().getRemoteAddress()+" 本地地址"+ RpcContext.getContext().getLocalAddress();
}
}
TestController.java
package com.lolxxs.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.rpc.RpcContext;
import com.lolxxs.service.TestService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/consumer")
public class TestController {
@Reference(version = "1.0.0", timeout = 300)
private TestService testService;
@GetMapping("/test")
public String getTest() {
return testService.testDubbo();
}
}
application.yml
server:
port: 9000
spring:
dubbo:
application:
name: springboot-dubbo-demo
registry:
address: zookeeper://127.0.0.1
port: 2181
protocol:
name: dubbo
port: 20890
scan: com.lolxxs.service
創建好直接運行DubboApplication類

出現如下資訊說明啟動了dubbo服務,并且dubbo服務成功連接zookeeper

點擊搜索,會發現多出了一個,就是我們剛剛創建的服務,也就是服務器的提供者

點擊最后一個詳情,出現如下,說明只有一個dubbo服務

我們啟動好了服務提供者(生產者),也就要啟動服務消費者,只需要改動組態檔后application.yml,再次點擊DubboApplication類中的按鈕啟動即可,注意之前的服務器不能關閉,idea可以啟動多個服務器,eclipse我以前用過好像沒法啟動多個服務器,組態檔修改埠和包掃描scan改為掃描controller包
application.yml
server:
port: 9002
spring:
dubbo:
application:
name: springboot-dubbo-consumer
registry:
address: zookeeper://127.0.0.1
port: 2181
protocol:
name: dubbo
port: 20890
scan: com.lolxxs.controller
啟動成功后,有兩種方法測驗,一種是直接在瀏覽器輸入http://localhost:9002/consumer/test,第二種就是使用postman,在postman輸入http://localhost:9002/consumer/test,使用get請求,這里為了簡單使用瀏覽器輸入,如下,可以看到收到回應

并且可以看到,第一個服務器是服務器提供者,第二個服務器是服務器消費者,我們訪問的是服務器消費者,但是卻是服務器提供者執行的代碼,這就是RPC(Remote Procedure Call)

負載均衡
觀察負載均衡我們需要啟動兩個服務器提供者,修改組態檔即可,兩個服務提供者的埠不能相同,并且protocol下面的埠也不能相同,服務消費者和上面配置一模一樣,注意兩個服務提供者的application.name必須相同,要不然它們就是兩種服務了,不是一種服務的兩個服務器提供者
服務提供者1
application.yml
server:
port: 9000
spring:
dubbo:
application:
name: springboot-dubbo-demo
registry:
address: zookeeper://127.0.0.1
port: 2181
protocol:
name: dubbo
port: 20890
scan: com.lolxxs.service
服務提供者2
application.yml
server:
port: 9001
spring:
dubbo:
application:
name: springboot-dubbo-demo
registry:
address: zookeeper://127.0.0.1
port: 2181
protocol:
name: dubbo
port: 20891
scan: com.lolxxs.service
服務消費者
application.yml
server:
port: 9002
spring:
dubbo:
application:
name: springboot-dubbo-consumer
registry:
address: zookeeper://127.0.0.1
port: 2181
protocol:
name: dubbo
port: 20890
scan: com.lolxxs.controller
然后依次啟動三個服務器,查看dubboAdmin,可以發現消費者和服務提供者都注冊成功了

點擊服務提供者的詳情,可以發現該服務現在有兩個提供者了,所以就可以使用負載均衡策略了

在瀏覽器多次輸入http://localhost:9002/consumer/test,會發現請求同一個地址,訪問的服務器可能不同,本地地址不同,也就是我們上面配置的dubbo暴露埠


查看idea中服務器運行情況,也可以發現兩個服務提供者服務器都運行了,且運行次數不同
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433235.html
標籤:其他
上一篇:全國多年平均降水量空間分布資料1951-2021年、氣溫分布資料、蒸散量資料、蒸發量資料、太陽輻射資料、日照資料、風速資料
下一篇:智慧環衛管理系統解決方案
