Dubbo接口測試學習筆記

關於dubbo:html

  一個遠程服務調用的分佈式框架,調用協議一般包含傳輸協議和序列化協議。Dubbo自己支持多種遠程調用方式,例如Dubbo RPC(二進制序列化 + tcp協議)、http invoker(二進制序列化 + http協議)、hessian(二進制序列化 + http協議)、WebServices (文本序列化 + http協議)等。java

官網介紹地址node

節點角色說明
節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器
調用關係說明
  1. 服務容器負責啓動,加載,運行服務提供者。
  2. 服務提供者在啓動時,向註冊中心註冊本身提供的服務。
  3. 服務消費者在啓動時,向註冊中心訂閱本身所需的服務。
  4. 註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
  5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
  6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

 

管理控制檯的編譯安裝:python

  • 新版管理控制檯主要的做用:服務查詢,服務治理(包括Dubbo2.7中新增的治理規則)以及服務測試、配置管理

# 克隆項目到本地,並編譯安裝和啓動(若是是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

  admin.config-center=zookeeper://127.0.0.1:2181github

  admin.registry.address=zookeeper://127.0.0.1:2181 算法

  admin.metadata-report.address=zookeeper://127.0.0.1:2181spring

# 啓動服務
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配置方式示例。

官方配置hessian協議及依賴例子

官方配置多協議例子

 

二、獲取接口地址(可在管理臺查看)、方法及方法的入參。

 

三、安裝 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"])

pyhessian官方調用例子

 

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 }
相關文章
相關標籤/搜索