精华内容
下载资源
问答
  • Spring零配置整合Dubbo

    2018-05-25 19:58:35
    Spring零配置下整合Dubbo,最简化形式

    首先引入Dubbo相关依赖:

    
            <cxf-core.version>3.0.4</cxf-core.version>
            <resteasy-client.version>3.5.1.Final</resteasy-client.version>
            <hessian.version>4.0.51</hessian.version>
            <xmemcached.version>2.4.3</xmemcached.version>
            <curator-framework.version>2.12.0</curator-framework.version>
            <zkclient.version>0.10</zkclient.version>
    
        <!-- https://mvnrepository.com/artifact/com.alibaba.dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-core</artifactId>
                <version>${cxf-core.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-client -->
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-client</artifactId>
                <version>${resteasy-client.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.caucho/hessian -->
            <dependency>
                <groupId>com.caucho</groupId>
                <artifactId>hessian</artifactId>
                <version>${hessian.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.googlecode.xmemcached/xmemcached -->
            <dependency>
                <groupId>com.googlecode.xmemcached</groupId>
                <artifactId>xmemcached</artifactId>
                <version>${xmemcached.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>${curator-framework.version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    

    假设消费方希望调用提供方的下列接口:

    public interface CityDubboService {
    
        /**
         * 根据城市名称,查询城市信息
         *
         * @param cityName
         */
        City findCityByName(String cityName);
    }

    我们先看服务提供方这边的使用形式:

    1. 第一步需要有实现此接口,当消费方调用时能有对象来执行业务逻辑。
    import com.alibaba.dubbo.config.annotation.Service;
    
    import com.bob.integrate.dubbo.common.entity.City;
    import com.bob.integrate.dubbo.common.service.CityDubboService;
    
    /**
     * 城市业务 Dubbo 服务层实现层
     */
    @Service(version = "1.0.0")
    public class CityServiceProvider implements CityDubboService {
    
        @Override
        public City findCityByName(String cityName) {
            return new City(1L, 2L, "温岭", "是我的故乡");
        }
    }

    同时使用Dubbo的@Service注解,将其注册为Spring的Bean和Dubbo的开放组件。

    当然@Service注解能其作用的前提是将Dubbo框架整合入Spring中:

    /**
     * @author Administrator
     * @create 2018-05-06 19:24
     */
    @EnableDubbo
    @Configuration
    @PropertySource("classpath:dubbo-provider.properties")
    public class DubboProviderContextConfig {
    }
    
    
    dubbo-provider.properties:
    
    dubbo.application.name=provider
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    #可以直接设置组件的Bean名称,这样就不使用默认的构造函数生成,因此以dubbo.protocol开头的其他配置就没用了,直接在Bean里设置
    #dubbo.protocol.id=dubboProtocolBean
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880

    这样Spring容器在启动时就会通过@EnableDubbo引入Dubbo,解析相应的配置,注册相应的组件。 不过在启动Spring前,请先启动zookeeper,让其接受提供者和消费者的服务注册。

    Zookeeper版本选择3.4.*,匹配zkclient的版本。

    2 . 下面看Dubbo消费者的使用方式:

    /**
     * @author Administrator
     * @create 2018-05-06 19:25
     */
    @EnableDubbo
    @ComponentScan
    @PropertySource("classpath:dubbo-consumer.properties")
    public class DubboConsumerContextConfig {
    }
    
    
    dubbo-consumer.properties: 
    
    dubbo.application.name=consumer
    dubbo.registry.address=zookeeper://127.0.0.1:2181

    向将Dubbo引入Spring,同时配置zookeeper注册地址以及应用方名称。

    之后就可以在Spring Bean中使用RPC服务:

    @Component
    public class CityServiceConsumer {
    
        @Reference(version = "1.0.0")
        private CityDubboService cityDubboService;
    
        public void printCity() {
            String cityName = "杭州";
            City city = cityDubboService.findCityByName(cityName);
            System.out.println(new Gson().toJson(city));
        }
    }
    

    通过@Reference标识开放接口,在使用时就能调用提供方此接口的实现Bean,实现RPC调用。

    以上就是最简化的Dubbo在Spring里的配置和使用形式。

    展开全文
  • 1、dubbo 有一个 dubbo.properties 作为默认配置 默认配置可以在不添加新的配置的前提下使用dubbo dubbo.properties 的内容(来自 https://github.com/alibaba/dubbo) 2、dubbo 学习参考链接 ·dubbo-admin管理...

    1、dubbo 有一个 dubbo.properties 作为默认配置

    默认配置可以在不添加新的配置的前提下使用dubbo


    dubbo.properties 的内容(来自 https://github.com/alibaba/dubbo)


    2、dubbo 学习参考链接

    ·dubbo-admin管理控制台的安装和使用:http://www.cnblogs.com/aqsunkai/p/6690607.html
    ·dubbo官网,下载和配置说明:http://dubbo.io/
    ·dubbo结合Spring:http://blog.csdn.net/congcong68/article/details/41113239
    ·dubbo 配置 :http://www.cnblogs.com/linjiqin/p/5859153.html
    ·zookeeper 基本含义: http://blog.csdn.net/gyflyx/article/details/18652913


    3、本地环境搭建-zookeeper(windows 环境)

    http://blog.csdn.net/bestcxx/article/details/73440892


    4、从github下载 dubbo 测试所需的几个工程 

    https://github.com/alibaba/dubbo


    先全部下载,然后取其中的 dubbo-admin和dubbo-demo

    dubbo-admin是dubbo监控平台,可以打包为war或者直接jetty运行(maven 配置 jetty 插件),启动后访问 http://localhost:9999/dubbo-admin 端口9999看你怎么定义了

    需要输入用户名和密码:root/root

    之后点击 返回首页


    然后进入预期的界面了



    dubbo-demo聚合了demo-api\demo-consumer\demo-provider

    demo-api是接口,demo-proveider 实现了demo-api

    demo-provider是提供者

    demo-consumer是消费者

    demo-provider和demo-consumer 都是在test中提供main方法启动,demo-consumer 一直调用,可以看到两个平台的交互



    5、实验得出的结论

    dubbo.properties 会起到默认配置的作用


    但是 dubbo-demo-provider.xml 中的配置可以对dubbo.properties 的配置进行覆盖和扩展(这意味着某些配置不是必须的)

    dubbo-demo-provider.xml 的内容(DemoTwoServiceImpl.java 和 DemoTwoService.java 是新增的两个类,分别加在dubbo-provider 和 dubbo-api中,参照先例即可)

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
     - 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.
    -->
    <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-2.5.xsd
    	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    	
    	<!-- bean的声明和Spring无差异 -->
    	<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
    	<bean id="demoTwoService" class="com.alibaba.dubbo.demo.provider.DemoTwoServiceImpl" />
    	
    	<!-- 由于dubbo.propertirs 的存在,可以直接配置 <dubbo:service>对外暴露服务,即存在默认的配置, -->
    	<dubbo:service interface="com.alibaba.dubbo.demo.DemoTwoService" ref="demoTwoService" group="dubbodemoregister2"/>
    	
    	<!-- 如果需要使用个性化配置,则需要单独配置,比如服务提供者协议配置、注册中心配置 、服务提供者缺省值配置-->
    	<!-- 服务提供者协议配置-dubbo会覆盖dubbo.properties: -->
    	<!-- <dubbo:protocol id="dubbodemo" name="dubbo" port="20882"/> -->
    	
    	<!-- 注册中心配置-会覆盖 dubbo.proerties,这个本质就是 dubbo:service的group: -->
    	<dubbo:registry id="dubbodemoregister" address="zookeeper://127.0.0.1:2181" protocol="dubbo"/>
    	<dubbo:registry id="dubbodemoregister2" address="zookeeper://127.0.0.1:2181" protocol="dubbo"/>
    	
    	<!-- 服务提供者缺省值配置-所有服务提供者自动拥有此配置-这意味着,这个配置一个就够了: -->
    	<!-- <dubbo:provider id="dubbodemoprovider" group="dubbodemoregister" timeout="30000" retries="0"/> -->
    		
    	<!-- 服务提供者暴露服务配置: -->
    	<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" group="dubbodemoregister"/> 
    	
    </beans>






    展开全文
  • Dubbo零基础学习指南

    2020-04-23 15:16:31
    系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代,根据不同服务对系统资源的要求不同,我们可以更合理的配置系统资源,使系统资源利用率...

    Dubbo

    1. 为什么出现Dubbo
      1. 随着现在互联网行业的发展,越来越多的框架、中间件、容器等开源技术不断地涌现,更好地来服务于业务,解决实现业务的问题。
      2. 随着业务的发展、用户量的增长,系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代,根据不同服务对系统资源的要求不同,我们可以更合理的配置系统资源,使系统资源利用率最大化。
    2. 系统服务的演变过程
      1. 单一应用框架(ORM)
        • 将所有功能部署在一起,减少部署节点和成本。
      2. 垂直应用架构(MVC)
        • 应用拆成互不相干的几个应用,以提升效率
      3. 分布式应用架构
        • 核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求
      4. 流动计算架构
        • 用于提高机器利用率的资源调度和治理中心(SOA) 是关键
    3. 电商系统的演变可以看出应用系统架构演变的过程:
    4. Dubbo是什么
      1. 一款分布式服务框架
      2. 高性能和透明化的RPC远程服务调用方案
      3. SOA服务治理方案
    5. Dubbo的架构
      1. 上图的流程:
        • 0.服务容器负责启动,加载,运行服务提供者。
        • 1.服务提供者在启动时,向注册中心注册自己提供的服务。
        • 2.服务消费者在启动时,向注册中心订阅自己所需的服务。
        • 3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
        • 4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
        • 5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
    6. Dubbo注册中心
      1. 注册服务:
        • 对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
      2. 消息订阅
        • 对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
      3. 两个身份都有:
        • 对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,又需要消费服务。
    7. 注册中心的目的:
      1. 通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。
    8. Dubbo提供的注册中心有几种类型:
      1. Multicast注册中心
      2. Zookeeper注册中心
      3. Redis注册中心
      4. Simple注册中心
    9. Dubbo优点:
      1. 透明化的远程方法调用
        • 像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入
      2. 软负载均衡及容错机制
        • 可在内网替代nginx lvs等硬件负载均衡器
      3. 服务注册中心自动注册 & 配置管理
        • 不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip
        • 使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群
      4. 服务接口监控与治理
        • Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理
    10. Dubooq缺点
      1. 只支持Java语言
    11. 使用Dubbo步骤
      1. 安装Zookeeper启动;
      2. 创建Maven项目,构建:Dubbo+Zookeeper+Spring
      3. 安装Dubbo-admin,监控
    12. Dubbo注册中心为什么采用Zookeeper?
      1. Zookeeper是一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据 ,这里能很好的作为Dubbo服务的注册中心。
      2. Dubbo能与Zookeeper做到集群部署,当提供者出现断电等异常停机时,Zookeeper注册中心能自动删除提供者信息,当提供者重启时,能自动恢复注册数据,以及订阅请求。
    13. 安装Zookeeper
      1. 在Zookeeper官网中下载Zookeeper发行包并解压:
      2. 复制Zookeeper配置文件
        • 将Zookeeper安装目录的conf子文件夹中的zoo_sample.cfg复制一份并重命名为zoo.cfg
    14. 运行Zookeeper
      1. 执行Zookeeper安装(解压)目录中bin子文件夹的zkServer.cmd启动Zookeeper
    15. 利用Maven创建Dubbo项目,主要分为以下组成部分:
      1. 项目Dubbo-consumer : 调用远程服务;
      2. 项目Dubbo-provider : 提供远程服务。
    16. Provider和Consumer需要提供相同的业务服务接口
    17. 为项目编辑pom文档
      1. 服务的提供者和消费者需要依赖的库相同,主要有Netty依赖、Zookeeper依赖、ZookeeperClient依赖、Dubbo依赖、Spring依赖等
    18. Provider中需要提供业务接口的实现:

    19. Provider在Spring容器中声明Dubbo的服务:
    20. Provider启动远程服务

    21. Consumer在Spring容器中声明需要调用的服务:

    22. Consumer调用远程服务:
    23. Dubbo管理控制台功能:
      1. 路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡。
    24. Dubbo控制台的使用
      1. 下载dubbo-admin,将dubbo-admin的war包发布到tomcat中,再运行tomcat即可,缺省用户名和密码均为root:
    25. 总结Dubbo
      1. Dubbo是一款分布式服务框架,一个高性能和透明化的RPC远程服务调用方案,一个SOA服务治理方案。
      2. Dubbo每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • dubbo服务配置sentinel

    2018-08-26 08:40:00
    ,配合上一篇文章配置dubbo项目,无需依赖其他的外部资源。 开始  在provider端的  pom.xml  文件中加入以下依赖: <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core <version>...

    前言

        前几天ali开源了Sentinel项目,Sentinel中文意思是哨兵,作为dubbo的配套项目,看字面意思是dubbo的一个监控系统,sentinel自己的官方文档上是这样说的:Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本文就是想简单的配置一下sentinel。

    准备

    Sentinel的官方文档是放在 Sentinel官方文档地址,配合上一篇文章配置的dubbo项目,无需依赖其他的外部资源。

    开始

        在provider端的 pom.xml 文件中加入以下依赖:

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-core</artifactId>
        <version>0.1.1</version>
    </dependency>

      在sayHello服务的中嵌入Sentinel的代码:

    public class SayHelloImpl implements SayHello {
        @Override
        public String sayHello(String name) {
            initFlowRules();
            Entry entry = null;
            try {
                entry = SphU.entry("HelloWorld");
                System.out.println("hello world");
    
                return "Hello " + name;
            } catch (BlockException e1) {
                System.out.println("exception is " + BlockException.isBlockException(e1));
                System.out.println("block!");
            } finally {
                if (entry != null) {
                    entry.exit();
                }
            }
            return "";
        }
    
        private void initFlowRules() {
            List<FlowRule> rules = new ArrayList<FlowRule>();
            FlowRule rule = new FlowRule();
            rule.setResource("HelloWorld");
            rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
            // Set limit QPS to 20.
            rule.setCount(5);
            rules.add(rule);
            FlowRuleManager.loadRules(rules);
        }
    }

          在上述代码中,把限流的方式设置为QPS = 5,然后改造下客户端的代码,进行20 次的调用:

    public class ConsumerApplication {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            SayHello sayHello = (SayHello) ctx.getBean("sayHello");
            for (int i = 0; i < 20; i++) {
                String s = sayHello.sayHello("张三");
                System.out.println(i + ":" + s);
            }
        }
    }
    

       启动Provider端和Consumer端后,看到provider的后台打印的是:

    hello world
    hello world
    hello world
    hello world
    hello world
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!
    exception is true
    block!

         只有前五次的调用成功了,其他的都在报了BlockException。所以在限流的时候,可以通过在BlockException 中进行限流那些请求的访问逻辑处理。

        Sentinel其实有提供一套注解,实现代码零侵入,接下来把代码改成注解形式实现,增加Sentinel的注解依赖包:

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-annotation-aspectj</artifactId>
        <version>0.1.1</version>
    </dependency>

        启动类改成springboot启动,增加注解的启动配置:

    @SpringBootApplication
    public class ProviderApplication {
    
        public static void main(String[] args) throws IOException {
            SpringApplication.run(ProviderApplication.class,args);
            System.in.read();
        }
    
        @Bean
        public SentinelResourceAspect sentinelResourceAspect() {
            return new SentinelResourceAspect();
        }
    
        @Bean
        public RegistryConfig registryConfig() {
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setAddress("zookeeper://127.0.0.1:2181");
            registryConfig.setClient("provider");
            return registryConfig;
        }
    }
    

     

    转载于:https://my.oschina.net/u/3470849/blog/1934056

    展开全文
  • Spring零配置下整合Dubbo
  • springboot dubbo配置

    2020-05-01 01:45:22
    dubbo版本 2.6.2 需要额外引入 implementation “org.apache.curator:curator-...provider配置 resources新增文件 dubbo/privider.xml (xml来自官网示例) <beans xmlns:xsi="http://www.w3.org/2001/XMLSc...
  • 最近也是根据网上教程和dubbo.io的教程将dubbo+zookeeper服务搭建了起来。网上的教程呢对于新手来说不友好的地方就是没有源码,很多人可能遇到一点解决不了的问题就放弃了。所以本篇文章主要分享源码地址和学习路径...
  • <div><p>该提问来源于开源项目:Percy0601/boot-dubbo</p></div>
  • 小册分为三个阶段:Dubbo 入门(《从开始学习 Dubbo》)、Dubbo 进阶(《Dubbo 高阶应用》)、Dubbo 底层原理(《Dubbo 源码分析》)分析。 当前内容版权归码字科技所有并授权显示,盗版必究。阅读原文
  • dubbo

    2021-08-31 20:54:11
    为什么要用 DubboDubbo 是什么? Dubbo 的使用场景有哪些? Dubbo 核心功能有哪些? 架构设计 Dubbo 核心组件有哪些? Dubbo 服务器注册与发现的流程? Dubbo 的整体架构设计有哪些分层? Dubbo Monitor 实现原理...
  • 本文是学习了dubbo之后自己手动写的,比较通俗,很多都是自己学习之后的理解,写的过程中没有参考任何文章。 另外dubbo也有官方文档,但是比较官方,也可以多看看dubbo的官方中文文档。 代码示例连接:demoTest ...
  • Dubbo

    2021-02-01 17:23:55
    配置层(Config):对外配置接口,负责Dubbo中生成各种配置类,例如协议,生产者以及具体的Bean信息的等等,方便再暴露和做负载均衡时直接使用 源码 服务代理层(Proxy):根据上一层生成的各个配置信息,两端根据...
  • 开始认识Dubbo

    2019-07-19 10:30:25
    开始认识Dubbo
  • SpringBoot2.0.6集成Dubboxml)

    千次阅读 2018-10-31 22:38:44
    springboot集成dubbo有多种方式,这里介绍一种比较新的不用xml的方式分享给大家,用到依赖dubbo-spring-boot-starter 项目环境:win10+jdk1.8+zookeeper3.4.13+springboot2.0.6 zookeeper的安装和配置不了解的,...
  • 基础认识dubbo

    2018-10-23 09:43:00
    Dubbo M:Dubbo跟Zookeeper是什么关系? Z:Dubbo是一个RPC远程服务框架,而dubbo建议使用Zookeeper作为服务的注册中心。如下图为Dubbo的使用架构,而其中的Registry则由Zookeeper承担。 Provider是提供者,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,481
精华内容 2,592
关键字:

dubbo零配置