關於dubbo:html
一個遠程服務調用的分佈式框架,調用協議一般包含傳輸協議和序列化協議。Dubbo自己支持多種遠程調用方式,例如Dubbo RPC(二進制序列化 + tcp協議)、http invoker(二進制序列化 + http協議)、hessian(二進制序列化 + http協議)、WebServices (文本序列化 + http協議)等。java
官網介紹地址node
節點 | 角色說明 |
---|---|
Provider |
暴露服務的服務提供方 |
Consumer |
調用遠程服務的服務消費方 |
Registry |
服務註冊與發現的註冊中心 |
Monitor |
統計服務的調用次數和調用時間的監控中心 |
Container |
服務運行容器 |
管理控制檯的編譯安裝:python
# 克隆項目到本地,並編譯安裝和啓動(若是是Windows下,則在powershell進行) git clone https://github.com/apache/incubator-dubbo-ops.git
# 切到項目根目錄 cd incubator-dubbo-admin-develop
# 編譯構建 mvn clean package
# 修改配置文件,指定註冊中心地址
dubbo-admin-server/src/main/resources/application-production.properties
# 主要的配置有:git
github
admin.registry.address=zookeeper://127.0.0.1:2181算法
spring
# 啓動服務
cd dubbo-distribution/target
java -jar dubbo-admin-0.1.jar
# 或如下命令啓動服務
mvn --projects dubbo-admin-server spring-boot:run
啓動完成後,直接訪問http://localhost:8080
如何測試dubbo接口:shell
Python hessian+http的方式調用:apache
一、dubbo項目中,增長hessian方式序列化,及相關依賴。下圖爲xml配置方式示例。
二、獲取接口地址(可在管理臺查看)、方法及方法的入參。
三、安裝 python-hessian
python -m pip install python-hessian
四、編寫Python腳本調用接口
# coding=utf-8 import pytest from pyhessian.client import HessianProxy class TestDubbo(object): url = "http://169.254.210.145:1234/" interface = "com.ymxdclass.user.service.UserService" full_url = url + interface # full_url = "http://169.254.210.145:8888/com.xdclass.user.service.FileService" def testsayHelloWithSpec(self): params = u"什麼我調用成功了嗎" # 建立鏈接對象 service = HessianProxy(self.full_url) # 重載方法__call()__裏發送二進制數據進行請求,調用方法 res = service.sayHello(params) assert "什麼我調用成功了嗎" in res print(res) # @pytest.mark.skip() def testsayHelloWithInt(self): params = 123 service = HessianProxy(self.full_url) res = service.sayHello(params) assert 123 in res print(res) if __name__ == "__main__": pytest.main(["-q","TestDubbo.py"])
java調用腳本
1 import com.ymxdclass.user.service.UserService; 2 import org.junit.BeforeClass; 3 import org.junit.Test; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
6 public class ConsumerTest { 7 static ClassPathXmlApplicationContext context; 8 static UserService userService; 9 @BeforeClass 10 public static void beforeClass(){ 11 if(context==null) { 12 // 默認從類路徑中加載配置文件 13 context = new ClassPathXmlApplicationContext("consumer.xml"); 14 System.out.println("load"); 15 // 在Spring中還提供了Lifecycle接口,Lifecycle中包含start/stop方法,實現此接口後Spring保證在啓動的時候調用其start方法開始生命週期,主要用於控制異步處理過程 16 context.start(); 17 // System.out.println("start"); 18 }
// 建立接口實例(定義接口的引用變量,再引用實現了該接口的實例) 19 userService=(UserService) context.getBean("userService"); 20 21 } 22 @Test 23 public void consumerTestCase1(){
// 調用方法 24 String hello = userService.sayHello("world"); 25 assertThat(hello,containsString("world"); 26 System.out.println(hello); 27 } 28 29 }