zoukankan      html  css  js  c++  java
  • dubbo系列(一)

    进入官网之后,找到

    http://dubbo.apache.org/en-us/docs/user/quick-start.html

    有一个链接跳转到这里

    http://dubbo.apache.org/en-us/docs/admin/install/provider-demo.html

    使用git将项目下载下来

    修改如下Service实现类

     1 /*
     2  * Licensed to the Apache Software Foundation (ASF) under one or more
     3  * contributor license agreements.  See the NOTICE file distributed with
     4  * this work for additional information regarding copyright ownership.
     5  * The ASF licenses this file to You under the Apache License, Version 2.0
     6  * (the "License"); you may not use this file except in compliance with
     7  * the License.  You may obtain a copy of the License at
     8  *
     9  *     http://www.apache.org/licenses/LICENSE-2.0
    10  *
    11  * Unless required by applicable law or agreed to in writing, software
    12  * distributed under the License is distributed on an "AS IS" BASIS,
    13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  * See the License for the specific language governing permissions and
    15  * limitations under the License.
    16  */
    17 package org.apache.dubbo.demo.provider;
    18 
    19 import org.apache.dubbo.demo.DemoService;
    20 import org.apache.dubbo.demo.TestForm;
    21 import org.apache.dubbo.rpc.RpcContext;
    22 import org.slf4j.Logger;
    23 import org.slf4j.LoggerFactory;
    24 
    25 import java.text.SimpleDateFormat;
    26 import java.util.ArrayList;
    27 import java.util.Collections;
    28 import java.util.Date;
    29 import java.util.List;
    30 
    31 public class DemoServiceImpl implements DemoService {
    32     private static Logger logger= LoggerFactory.getLogger(DemoServiceImpl.class);
    33     @Override
    34     public String sayHello(String name) {
    35         System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
    36         return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();
    37     }
    38 
    39     @Override
    40     public List<TestForm> tranForm(TestForm testForm) {
    41         if(testForm==null){
    42             return Collections.emptyList();
    43         }
    44         logger.info("当前在{} 执行",RpcContext.getContext().getLocalAddress());
    45         List<TestForm> testFormList=new ArrayList<>(1);
    46         testFormList.add(testForm);
    47         return testFormList;
    48     }
    49 
    50 }
    tranForm()是我新增的,TestForm 是一个普通的实体类
    public class TestForm implements Serializable{
        private boolean b;
        private String s;
        private Integer i;
        private BigDecimal bigDecimal;
        private  Double d;
    //这里省略get set方法 构造方法
    }

    修改dubbo-demo/dubbo-demo-consumer/的Consumer

     1 /*
     2  * Licensed to the Apache Software Foundation (ASF) under one or more
     3  * contributor license agreements.  See the NOTICE file distributed with
     4  * this work for additional information regarding copyright ownership.
     5  * The ASF licenses this file to You under the Apache License, Version 2.0
     6  * (the "License"); you may not use this file except in compliance with
     7  * the License.  You may obtain a copy of the License at
     8  *
     9  *     http://www.apache.org/licenses/LICENSE-2.0
    10  *
    11  * Unless required by applicable law or agreed to in writing, software
    12  * distributed under the License is distributed on an "AS IS" BASIS,
    13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  * See the License for the specific language governing permissions and
    15  * limitations under the License.
    16  */
    17 package org.apache.dubbo.demo.consumer;
    18 
    19 import com.alibaba.fastjson.JSON;
    20 import org.apache.dubbo.demo.DemoService;
    21 import org.apache.dubbo.demo.TestForm;
    22 import org.slf4j.Logger;
    23 import org.slf4j.LoggerFactory;
    24 import org.springframework.context.support.ClassPathXmlApplicationContext;
    25 
    26 import java.math.BigDecimal;
    27 import java.util.List;
    28 
    29 public class Consumer {
    30     private static Logger logger= LoggerFactory.getLogger(Consumer.class);
    31 
    32     /**
    33      * To get ipv6 address to work, add
    34      * System.setProperty("java.net.preferIPv6Addresses", "true");
    35      * before running your application.
    36      */
    37     public static void main(String[] args) {
    38         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
    39         context.start();
    40         DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy
    41         int i=10;
    42         while (i-->0) {
    43             try {
    44                 List<TestForm> testFormList = demoService.tranForm(new TestForm(true,"s",i,new BigDecimal(99),null)); // call remote method
    45                 logger.info("序号:{}:返回内容:{}",i,JSON.toJSON(testFormList)); // get result
    46             } catch (Throwable throwable) {
    47                 throwable.printStackTrace();
    48             }
    49         }
    50     }
    51 }

    修改 <dubbo:protocol name="dubbo" port="端口号"/> 运行Provider中的main方法 ,依次启动三个provider服务,端口号分别是 20880,20881,20882

    运行Consumer中main方法,查看日志可以看出,Consumer分布式调用Provider已经成功了

     这个demo中,一共有三个模块

    dubbo-demo-api 定义Service接口

    dubbo-demo-consumer 传递实参调用Service

    dubbo-demo-provider 定义Service实现类

            在consumer配置文件中,没有定义DemoService的实现类(文件路径:dubbo-demodubbo-demo-consumersrcmain esourcesMETA-INFspringdubbo-demo-consumer.xml)

    而与DemoService相关的有这样的一个配置,我猜是dubbo创建了DemoService的bean并且放到了spring容器里,下面证实一个我的猜想:

     <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.demo.DemoService"/>

    通过日志输入demoService的类型

    logger.info("demoService实际类型:{}",demoService.getClass().getName());
    [28/09/18 11:29:58:058 CST] main  INFO consumer.Consumer: demoService实际类型:org.apache.dubbo.common.bytecode.proxy0

    打开 org.apache.dubbo.common.bytecode.Proxy 类,可以看到代理就是在这里创建的,继承了org.apache.dubbo.common.bytecode.Proxy抽象类

    那么这个代理有什么用呢?未完待续

  • 相关阅读:
    c#中子线程控制进度条的一个简单例子
    c#中WinForm的TextBox循环自动滚动示例
    c#中重定向windows控制台程序的输出信息
    c#中List <int[]>集合添加和查找元素
    LogExplore的一个详细操作手册
    ConsoleApplication也精彩,一个控制台进度条的示例。
    c#通过oledb获取excel文件表结构信息
    Dephi中获取webbrowser选取区域的html代码示例
    SQL2005中利用xml拆分字符串序列
    今天装上了php6```
  • 原文地址:https://www.cnblogs.com/LDDXFS/p/9719177.html
Copyright © 2011-2022 走看看