Dubbo-本地測試直連


 

一、服務提供方

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans          
    http://www.springframework.org/schema/beans/spring-beans.xsd          
    http://code.alibabatech.com/schema/dubbo          
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 當前應用名稱,用於注冊中心計算應用間依賴關系,注意:消費者和提供者應用名不要一樣 -->
    <dubbo:application name="dubbo-provider" />
    <!-- 測試環境:register 是否向此注冊中心注冊服務,如果設為false,將只訂閱,不注冊 -->
    <dubbo:registry protocol="zookeeper" address="zookeeper://xxx.xxx.xxx.xxx:32181" register="false" />
    
    
    <!-- provider提供方 -->
    <!-- 用dubbo協議在20882端口暴露服務 -->
    <!-- 服務提供者協議配置,提供方需要指定端口,不同提供方需要使用不同端口,不然會有端口沖突,使用的端口需要在防火牆iptables中配置允許通過 -->
    <dubbo:protocol name="dubbo" port="20882" />

<!-- 聲明需要暴露的服務接口 --> <dubbo:service interface="com.xxx.dubboprovider.Ixxx" ref="serviceA" version="1.0.0" timeout="1200000" /> <!-- 和本地bean一樣實現服務 --> <bean id="serviceA" class="com.xxx.dubboprovider.impl.xxxxImpl" /> </beans>

如果是本地連接測試環境的的dubbo,此處可以不用寫,永自帶的提供方即可;如果是本地開啟注冊到zookeeper,那么此處就要寫上相關信息

上述就轉換為:直連提供者只需要在消費端設置 。

 

二、服務消費方

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans          
    http://www.springframework.org/schema/beans/spring-beans.xsd          
    http://code.alibabatech.com/schema/dubbo          
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 應用信息,用於計算依賴關系。在dubbo-admin或dubbo-monitor會顯示這個名字,方便識別 -->
    <dubbo:application name="dubbo-client" />

    <!-- 測試環境:調試直連的話加上這個屬性 register="false" -->
    <dubbo:registry protocol="zookeeper" address="zookeeper://xxx.xxx.xxx.xxx:32181" register="false" />
    
    <!-- 逾期信息 -->
    <dubbo:reference id="dubboProviderService" interface="com.xxx.dubboprovider.Ixxx" check="false" version="1.0.0" url="dubbo://xxx:xxx:xxx:xxx:port"/>
</beans>

 

三、啟動測試程序主入口

package com.xxx.xxx.xxx.dubbo;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.macula.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * <p>
 * <b>DubboMain</b> is 測試Dubbo主流程使用
 * </p >
 * 
 * @since 2019年10月12日 10:49:54
 * @author Liuyc
 * @version $Id: codetemplates.xml 1145 2019年10月12日 Liuyc $
 */
public class DubboMain {
    
    private static final Log log = LogFactory.getLog(DubboMain.class);

    public static void main(String[] args) {
        try {
            ClassPathXmlApplicationContext parentContext = new ClassPathXmlApplicationContext(
                    "classpath:applicationContext-root.xml");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {
 "classpath:/configs/applicationContext-app.xml",
                            "classpath:/configs/applicationContext-core.xml" }, parentContext);

            ApplicationContext.setContainer(context);

            context.start();

            System.out.println(new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]").format(new Date())
                    + " Dubbo service server started!");
        } catch (Exception e) {
            System.out.println(e);
            log.error("== DubboProvider context start error:",e);
        }
        synchronized (DubboMain.class) {
            while (true) {
                try {
                    DubboMain.class.wait();
                } catch (InterruptedException e) {
                    log.error("== synchronized error:",e);
                }
            }
        }
    }
    
}

為了方便測試,可以先把API合並到dubbo中,發布之后,再測試本地的接口實現是否正確

四、測試入口

package com.xxx.xxx.xxx.api.impl;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;



/**
 * 
 * @author Liuyc
 *
 */
@RunWith(SpringJUnit4ClassRunner.class) // 使用junit4進行測試
@ContextConfiguration(locations = { "classpath:api-consumer.xml" }) // 加載配置文件:當前的消費者是測試中的消費者,可以拷貝一份過來
public class TestApi {

    private static final Log log = LogFactory.getLog(TestApi.class);

    @Autowired
    XxxApi xxxApi;

     
    // 1. 此處可以測試自己的API是否正確
    @Test
    public void getMyActivities() {
         // to do something
    }

}                

 

注意:啟動的時候可以run,也可以debug,可以任意測試是否正確;如果很有信息,可以使用官網的簡易測試  invoke,參考:http://dubbo.apache.org/zh-cn/docs/user/references/telnet.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM