• dubbo入门示例


      

      跟别个一样,介绍dubbo之前先介绍下软件相互架构的演变。

    • 单一应用架构,一个应用包含前后端,service、controller、dao等,如启明struts2项目;
    • 垂直应用架构,分离前后端,各是一个应用,实现MVC,如启明SpringMVC项目;
    • 分布式服务架构,将一个应用拆分到多台机器上,实现集群,利用nginx等,RPC是关键;
    • 流动计算架构,实时监测压力,提高机器利用率的调度中心,如dubbo。

      说白了,dubbo就跟webservice是一个功能,将本地的service发布到远端,使不同系统直接的服务能直接调用。

      用dubbo,先用zookeeper做注册中心。安装zookeeper的方式很简单,上传tar包,解压即可:

       

      注意修改dataDir目录为真实目录,这里的clientPort就是zookeeper提供给别人连接它的端口,我认为。

      dubbo麻烦些。

      第一步:需要下载一个dubbo-admin的工程,放到tomcat容器下,

      坑taotao工程给的dubbo-admin只能跑在jdk7下8不行,去CSDN上找的个项目;

      注意看此处dubbo的配置文件,dubbo的注册地址默认是指向zookeeper的ip和端口。

      第二步,引入dubbo相关依赖,

    <!-- dubbo相关 -->
    
    <dependency>
    
    <groupId>com.alibaba</groupId>
    
    <artifactId>dubbo</artifactId>
    
    <exclusions>
    
    <exclusion>
    
    <groupId>org.springframework</groupId>
    
    <artifactId>spring</artifactId>
    
    </exclusion>
    
    <exclusion>
    
    <groupId>org.jboss.netty</groupId>
    
    <artifactId>netty</artifactId>
    
    </exclusion>
    
    </exclusions>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.apache.zookeeper</groupId>
    
    <artifactId>zookeeper</artifactId>
    
    </dependency>
    
    <dependency>
    
    <groupId>com.github.sgroschupf</groupId>
    
    <artifactId>zkclient</artifactId>
    
    </dependency>

    第三步,写接口和接口实现类,交给dubbo,

    dubbo的xmlns和xsi:

    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    
    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

    然后就可以写Interface和Service,交给Spring容器生成bean,再把bean交给dubbo去发布。

    <!-- 自动注册该路径下的实体bean,路径包含子包路径 -->
    
    <context:component-scan base-package="com.taotao.service"/>
    
    <!--<bean id="itemService" class="com.taotao.service.impl.ItemServiceImpl"/>-->
    
     
    
    <!-- 使用dubbo发布服务 -->
    
    <dubbo:application name="taotao-manager"/>
    
    <dubbo:registry protocol="zookeeper" address="192.168.124.136:2181"/>
    
    <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
    
    <dubbo:protocol name="dubbo" port="20880"/>
    
    <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl"/>

    dubbo发布service,application即应用名称,随意,跟工程名一样即可;

    registry对应zookeeper注册中心的地址,端口zookeeper的clientPort,2181;

    dubbo:protocol的port是随意指定的空闲端口;

    dubbo:service的interface标明发布service的类接口型,ref对应bean的id,这里由于使用了Spring的自动扫描,ref就是实现类的名字。

    然后在另一个项目中,同样引入依赖,配置dubbo引用:

    <!-- 引用dubbo服务 -->
    
    <dubbo:application name="taotao-manager-web"/>
    
    <dubbo:registry protocol="zookeeper" address="192.168.124.136:2181"/>
    
    <dubbo:protocol name="dubbo" port="20880"/>
    
    <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
    
    <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" check="true"/>

    指向同一个注册中心,使用相同协议和端口,dubbo:reference同一个接口,id是controller里实例名;

    然后开始测试,先启动provider端,

    @RunWith(SpringJUnit4ClassRunner.class)
    
    @ContextConfiguration({"/spring/applicationContext-*.xml"})
    
    public class JunitTest {
    
    @Autowired
    
    private ItemService itemService;
    
    @Test
    
    public void c1() {
    
    TbItem item = itemService.getItemById(536563);
    
    System.out.println(item.getTitle() );
    
    while(true){}
    
    }
    
    }

    利用Spring-test和Junit4,加载applicationContext配置文件,利用死循环让服务不停止,其他阻塞的方式亦可。

    打开dubbo-admin的监控界面(用户名root,密码root),

     

    发现提供者多了一行信息,点开详情:

     

    说明发布成功。

    然后启动consumer的web工程taotaomanager-web,

     

    说明消费者端启动成功。

    访问web工程taotaomanager-web,测试刚刚的ItemService,

    controller代码:

    @Autowired
    
    private ItemService itemService;
    
    @RequestMapping("/item/list")
    
    @ResponseBody
    
    public EasyUIDataGridResult getItemList(Integer page, Integer rows) {
    
    EasyUIDataGridResult result = itemService.getItemList(page, rows);
    
    TbItem tbItem = itemService.getItemById(536563);
    
    return result;
    
    }

    pom.xml配置:

    <build>
    
    <plugins>
    
    <plugin>
    
    <groupId>org.eclipse.jetty</groupId>
    
    <artifactId>jetty-maven-plugin</artifactId>
    
    <version>9.3.13.v20161014</version>
    
    <configuration>
    
    <httpConnector>
    
    <port>8899</port>
    
    </httpConnector>
    
    <webAppConfig>
    
    <contextPath>/</contextPath>
    
    </webAppConfig>
    
    </configuration>
    
    </plugin>
    
    </plugins>
    
    </build>

    访问成功界面:

     

    坑:凡是通过dubbo传输的对象,必须实现Serializable接口,保证可被序列化。

    最后:

    其实dubbo-admin应该是可以不用的,只是一个监控工程,可有可无;

    如果不自己搭建注册中心,可以使用multicast广播地址,固定为:

    <dubbo:registry address="multicast://224.5.6.7:1234"/>

    估计这个IP是阿里提供的。

    思考: 如果不用dubbo,可以实现java项目通信吗?

    直接java代码,A系统调用B系统的服务,基于springMVC。调用可以用HttpUrlConnection或者HttpClient。

  • 相关阅读:
    C. Tanya and Toys_模拟
    B. Qualifying Contest_排序
    A. Round House_数学问题
    广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
    广搜,智能拼图(ZOJ1079)
    类似LIS+贪心(ZOJ1025)
    字符串处理(POJ1782)
    打表格,字符串处理,POJ(2136)
    二进制字符串匹配
    括号匹配问题
  • 原文地址:https://www.cnblogs.com/cherishBlueSky/p/10083433.html
Copyright © 2020-2023  润新知