zoukankan      html  css  js  c++  java
  • 集成Dubbo服务(Spring)

    Dubbo是什么?

    Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
    Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

    其核心部分包含:
    • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
    • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    Dubbo能做什么?

    • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
    • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
    • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

    Spring集成

    Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
     

    Provider部分

    新建一个Web工程 ,导入以下包:
     
     
    新建一个DemoService.java类,提供者和消费者都要有这个Service,
    package com.znn.provider;
    
    public interface DemoService {
        String sayHello(String name);
    }

    新建一个服务提供方实现接口,对服务消费方隐藏实现
    DemoServiceImpl.java

    package com.znn.provider;
    
    public class DemoServiceImpl implements DemoService{
    
        @Override
        public String sayHello(String name) {
            return "Hello Dubbo,Hello " + name;
        }
    
    }
    用Spring配置声明暴露服务:
    新建一个dubbo-provider.xml文件对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="hello-world-app"  />
     
        <!-- 使用multicast广播注册中心暴露服务地址 -->
       <!--  <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
     
         <!-- 使用zookeeper注册中心暴露服务地址 -->
        <dubbo:registry address="zookeeper://115.28.189.59:2181" />
     
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
     
        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="com.znn.provider.DemoService" ref="demoService" />
     
        <!-- 和本地bean一样实现服务 -->
        <bean id="demoService" class="com.znn.provider.DemoServiceImpl" />
    </beans>
    注:有两种暴露地址的方法,广播的那个在测试消费者的时候没有成功,就自己搭了一个zookeeper,使用zookeeper来管理。

    消费者部分

    另外新建一个工程:znn-service-consumer
    导入第三方包,和提供者一样。另外可以把提供者打成一个Jar,在消费者部分添加,如果用的是Eclipse并且提供者和消费者在同一个workplace下,可以直接通过右键->propertities->Java Build Path->Project->Add来添加。
    新建一个dubbo-consumer.xml,对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="consumer-of-helloworld-app"/>
        <!-- 使用multicast广播注册中心暴露发现服务地址 -->
        <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
        <dubbo:registry address="zookeeper://115.28.189.59:2181" />
        <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
        <dubbo:reference id="demoService" interface="com.znn.provider.DemoService" />
    </beans>

    新建一个测试类,当然具体用的时候会写一个专门的类使用IOC注入:

    package com.znn.consumer;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.znn.provider.DemoService;
    
    public class Consumer {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:D:/develop/myeclipsework/znn-service-consumer/WebRoot/WEB-INF/dubbo-consumer.xml");
            context.start();
            DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
            String hello = demoService.sayHello("world"); // 执行远程方法
            System.out.println(hello);
        }
    }
    先运行提供者,然后运行消费者:
     
  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/koal/p/4982759.html
Copyright © 2011-2022 走看看