• 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

  • 相关阅读:
    mysql for update 高并发 死锁研究
    IntelliJ IDEA导航特性Top20
    idea工具
    图片水印处理-temp
    idea常用快捷键列表
    编写MyLayer,2 锚点,3 精灵的创建,4 zorder
    CSS学习(十六)-HSLA颜色模式
    android中LocalBroadcastManager的使用
    什么是鸭子类型(duck typing)
    线程应用的场景
  • 原文地址:https://www.cnblogs.com/yuchuan/p/dubbo_test.html
Copyright © 2020-2023  润新知