分布式系统_进程间通信_dubbo使用入门

Dubbo简介

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

Dubbo RPC框架不同于一般的RPC框架的地方在于,Dubbo RPC的目的在于实现SOA服务的治理和服务管理。其通过服务注册中心来发现服务,并通过服务中心来分发服务来实现服务的负载均衡,通过服务发现来解耦服务,使得整个服务能力可以高效地进行扩展。

Dubbo使用入门

本章节结合Spring Boot 1.3.12.RELEASE和Dubbo来讲解,Dubbo的使用说明。Dubbo RPC的基本结构中包括了,服务提供者和服务消费者。下面分别从服务提供者和服务消费者来说明。

dubbo-provider

基本的代码结构说明

dubbo-provider
    src
      main
        com.egoo
            service
                Demo.java
                DemoImpl.java
            Application.java
      resources
        dubbo
            provider.xml

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.egoo</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <dubbo.version>2.4.10</dubbo.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

        <!-- RPC -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>1.3.2.RELEASE</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.2.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <fork>true</fork>
                    <meminitial>512m</meminitial>
                    <maxmem>1048m</maxmem>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

应用配置
resources->dubbo->provider.xml

<?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="DemoProvider"  />

    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <bean id="demoImpl" class="com.egoo.service.DemoImpl" />

    <!-- service -->
    <!--将接口暴露给服务中心-->
    <dubbo:service interface="com.egoo.service.Demo" version="1.0.0" ref="demoImpl"  id="demo" />

</beans>

创建对应的服务

服务接口
package com.egoo.service;

/**
 * Created by fiboliu on 16-5-3.
 */
public interface Demo {

    String greeting(String message);
}
服务实现
package com.egoo.service;

/**
 * Created by fiboliu on 16-5-3.
 */
public class DemoImpl implements Demo {

    public String greeting(String message) {

        return message;
    }
}

Application.java //main function

package com.egoo;

import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ImportResource;

import java.io.IOException;

/**
 * Created by fiboliu on 16-5-3.
 */
@ImportResource({"classpath:dubbo/provider.xml"})
public class Application {

    public static void main(String args[]) {

        SpringApplication.run(Application.class, args);

        try {

            System.out.println("启动成功,按任意键关闭");
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

dubbo-consumer

基本的代码结构说明

dubbo-consumer
    src
      main
        com.egoo
            service
                Demo.java
            Application.java
      resources
        dubbo.properties
        dubbo
            consumer.xml

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.egoo</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <dubbo.version>2.4.10</dubbo.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

        <!-- RPC -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>1.3.2.RELEASE</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.2.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <fork>true</fork>
                    <meminitial>512m</meminitial>
                    <maxmem>1048m</maxmem>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

resources文件
consumer.xml

<?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="DemoConsumer"  />

    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <dubbo:reference id="demo" interface="com.egoo.service.Demo" version="1.0.0" />

</beans>

dubbo.properties

##
# Copyright 1999-2011 Alibaba Group.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##
dubbo.container=log4j,spring
dubbo.application.name=consumer
dubbo.application.owner=egoo
dubbo.registry.address=multicast://224.5.6.7:1234
#dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
#dubbo.monitor.protocol=registry
dubbo.log4j.file=logs/dubbo-demo-consumer.log
dubbo.log4j.level=WARN

接口文件(保证和provider接口文件一致)

package com.egoo.service;

/**
 * Created by fiboliu on 16-5-3.
 */
public interface Demo {

    String greeting(String message);
}

Application.java

package com.egoo;

import com.egoo.service.Demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ImportResource;

/**
 * Created by fiboliu on 16-5-3.
 */
@SpringBootApplication
@ImportResource({"classpath:dubbo/consumer.xml"})
public class Application {

    public static void main(String args[]) {
        ApplicationContext context = SpringApplication.run(Application.class, args);
        Demo demo = (Demo) context.getBean("demo");
        System.out.println(demo.greeting("hello world!!"));
    }

}
时间: 2024-11-02 20:04:59

分布式系统_进程间通信_dubbo使用入门的相关文章

PS切图绝技之扣图大法

  绝音:专业提供扣图药方,一帖见效,药到病除.当然,也推荐你看看优设今年下载量第一的抠图神器: 功效:去除图标.按钮等背景图的底色 威力:★★★★ 需求:很多时候我们需要用到一些全透明的素材,比如: 问题: 设计图中没有全透明的素材 魔术棒选区会带有一些半透明度,底色背景删不干净, 我们可以直接手工选区,一点点的删除底色背景,但是效率好低. 思考: 有没有办法设置魔术棒工具选区但不带半透明,让底色删的干净点? 嘿嘿,我苦练了半天,终于练出成果,请看练功秘籍. 秘籍: 选择"魔术棒"工

PS手把手教你做苹果WWDC2014 风格海报

  今年WWDC的海报刚刚出炉,就有同学想要教程了.可能熟悉的同学知道Photoshop里有个彩色半调,但是是圆的,那么海报上面 的圆角矩形的是怎么弄的呢?今天@hs到被狗追 同学找到了办法,而且教程没有想象的那么难,更不需要代码··· 好了正式开始··· 0. 先随便找个Apple 的 Logo到Ps; 1. 然后选中它的选区.在按ctrl+shift+i反选,再shift+f6羽化差不多16px. 2. 新建一个图层alt+delete 填充随便什么色; 像这样: 3. 导出png到Ai,选

Android下AIDL机制详解

AIDL全名Android Interface Definition Language,是一种接口定义语言,也是Android系统的一种跨进程通信机制.从AIDL的名字就可以看出来,AIDL做的就是在服务提供进程和服务使用进程之间的协商好的接口,双方通过该接口进行通信.本文将以一个例子来讲述AIDL的使用方式和流程,在下一篇文章中我将从代码层面对AIDL进行分析. AIDL实例 文章中所涉及的例子来源于android开发之AIDL用法_进程间通信原理详解一文.首先我们创建一个AIDL文件,并创建

ArcGIS for Desktop入门教程_第五章_ArcCatalog使用 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第五章_ArcCatalog使用 - ArcGIS知乎-新一代ArcGIS问答社区 1 ArcCatalog使用1.1 GIS数据 地理信息系统,就是将真实的地物或地理现象抽象为计算机可表达的简单的集合类型(比如点.线.多边形),再按其几何类型和专题信息进行分类,通过计算机技术来管理和分析这些数据.从数据的组织形式上,我们通常将其分为矢量数据和栅格数据两大类. 如上图所示,分别用矢量和栅格的形式来表达一条高速公路.我们可以清晰地发现矢量数据与栅

ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介1.1 ArcGIS for Desktop ArcGIS for Desktop是ArcGIS产品线上的桌面端软件产品,为GIS专业人士提供的信息制作和使用的工具.利用ArcGIS for Desktop,你可以实现任何从简单到复杂的GIS任务,包括制图,地理分析,数据编辑,数据管理,可视化和空间处理等.它可以作为三个独立的软件产品购买,每个产

ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉Windows的基本操作 · 接触过地理信息系统的概念 · 理解地理数据的特点 1.2 预期效果 我们期望用户在阅读完本指南后对以下知识有一定的了解: · 了解ArcGIS for Desktop的组成与功能 · 熟悉使用ArcGIS for Desktop进行数据编辑.整饰和输出的流程 · 如何使用A

ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区 1 软件安装1.1 安装前准备 请确认已经收到来自Esri中国(北京)有限公司发出的软件安装光盘及包含许可授权文件(*.prvs或 *.prvc)的电子邮件. *.prvs是浮动版的许可,*.prvc是单机版的许可.下面以浮动版许可为例,介绍软件的安装. 在安装之前,请先确认待安装软件的系统.硬件及软件环境,是否满足ArcGIS for Desktop 10.4的

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区 1 学习资源 用户在学习和应用过程中,可以参考的资源如下: 1. ArcGIS资源中心 http://resources.arcgis.com/en/home/ 2. Esri中国在线支持中心http://support.esrichina.com.cn/ 3. ArcGIS知乎社区 http://zhihu.esrichina.com.cn/ 4. 优酷视频ht