• dubbo示例


    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

    我也不明白这是什么意思,使用了之后大概就是提供一个将多个项目进行联合的一种分布式,使用的是一种长链接的方法,具体没有深入研究,只是试用了一下。

    其核心部分包含:

    • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。(具体应该是一种长连接的方式,所以速度较快)
    • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。(使用dubbo,一般会使用zookeeper来做集群)
    • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。(统一的注册中心,如果注册中心挂掉了,已经注册的会存在于缓存中,不会断掉。)

    Dubbo能做什么?

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

    另外dubbo进行了与spring的完全融合,所以可以直接通过spring的xml文件进行配置,至于怎么与spring-boot整合,还不知道。

    上实现:

    1.首先需要一个zookeeper;具体用法请百度。

    2.启动zookeeper,以这个服务作为注册中心

    3.生产者,首先引入zookeeper的jar

    <!-- zookeeper -->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
                <scope>provided</scope>
            </dependency>
            
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.6</version>
                <exclusions>
                    <exclusion>
                        <artifactId>jmxtools</artifactId>
                        <groupId>com.sun.jdmk</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jmxri</artifactId>
                        <groupId>com.sun.jmx</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jms</artifactId>
                        <groupId>javax.jms</groupId>
                    </exclusion>
                </exclusions>
            </dependency>

    然后是dubbo

        <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.4.9</version>
                <scope>compile</scope>
                <exclusions>
                    <exclusion>
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>

    别忘了还有spring的,这里就不贴了

    3.1:

          首先定义一个接口,用来发布的:

    public interface ProvideService {
    
        public String sayHello(String name);
    }

    进行实现:

    @Service(value = "provideService")
    public class ProvideServiceImpl implements ProvideService {
    
        public String sayHello(String name){
            System.out.println ("ProvideServiceImpl  sayHello 走到了");
            return name + " say Hello";
        }
    
    }

    然后是最关键的spring 配置dubbo

    applicationContext.xml

        <!-- 启动spring注解扫描 -->
        <context:annotation-config /> 
    
        <context:component-scan base-package="com.dubbo.*" />
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="lclc_provider" />
    
    
        <!-- 使用zookeeper注册中心暴露服务地址 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" /> 
    
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
    
        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="com.dubbo.ProvideService"
            ref="provideService" />

    启动spring即可

     public static void main(String[] args){
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext ("applicationContext.xml");
            context.start ();
            try {
                System.in.read ();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace ();
            }// 按任意键退出
        }

    4.然后是消费者

    引入的jar包与生产者一样,但是需要多加一个,即生产者方提供的接口,因为是通过接口进行代理的

    4.1:消费

      public static void main(String[] args){
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext ("applicationContext.xml");
    
            context.start ();
    
            ProvideService demoService = (ProvideService) context.getBean ("ProvideService");// 获取远程服务代理
    
            String hello = demoService.sayHello ("lclc");// 执行远程方法
    
            System.err.println (hello);// 显示调用结果
        }

    application.xml

    <!-- 启动spring注解扫描 -->
        <context:annotation-config /> 
    
        <context:component-scan base-package="com.dubbo.*" />
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="lclc_consumer" />
    
        <!-- 使用zookeeper注册中心暴露服务地址 -->
         <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
    
        <dubbo:reference id="ProvideService"  interface="com.dubbo.ProvideService" />

    请注意:生产者与消费者是两个项目,是部署在两个服务器上的,通过dubbo进行链接起来,消费者调用生产者的接口就像调用本地一样。

  • 相关阅读:
    Frameworks.Entity.Core 5 EntityValidation
    Frameworks.Entity.Core 4
    大叔 Frameworks.Entity.Core 3 Predicate
    大叔 Frameworks.Entity.Core 2 PageList
    Frameworks.Entity.Core 1
    大叔 EF 来分析 EntityFrameworks.Data.Core 2
    大叔 EF 来分析 EntityFrameworks.Data.Core 1
    基于 Lind.DDD 的 权限管理系统
    HttpApplication IHttpAsyncHandler, IHttpHandler, IComponent, IDisposable ps url System.Web.dll
    MVC 记录
  • 原文地址:https://www.cnblogs.com/lic309/p/4378426.html
Copyright © 2020-2023  润新知