Dubbo基本用法-Dubbo Provider配置

[这里是图片001]

Dubbo基本用法-Dubbo Provider配置

中间件小哥 2018-06-12 20:44:41 浏览939 评论0

</div>
        <ul class="tag-group">
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_512/" class="label-item"><span>Apache</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_698/" class="label-item"><span>配置</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_1383/" class="label-item"><span>Annotation</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_1536/" class="label-item"><span>EDAS</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_1861/" class="label-item"><span>Registry</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_1955/" class="label-item"><span>schema</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_2437/" class="label-item"><span>alibaba</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_2614/" class="label-item"><span>service</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_4134/" class="label-item"><span>dubbo</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_7062/" class="label-item"><span>Provider</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_10507/" class="label-item"><span>XML配置</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_13623/" class="label-item"><span>企业级分布式应用服务</span></a>
            </li>
                        <li class="tag tag-item">
                <a href="/tags/type_blog-tagid_28912/" class="label-item"><span>dubbo.properties</span></a>
            </li>
                </ul>


        <p class="blog-summary">
        <em>摘要:</em>
        本章节主要讲述如何配置dubbo,按照配置方式上分,可以分为:XML配置,properties方式配置,注解方式配置,API调用方式配置。

按照功能角度进行划分,可以分为Dubbo Provider和Dubbo Consumer。

<div class="content-detail markdown-body">

Dubbo基本用法

本章节主要讲述如何配置dubbo,按照配置方式上分,可以分为:XML配置,properties方式配置,注解方式配置,API调用方式配置。
按照功能角度进行划分,可以分为Dubbo Provider和Dubbo Consumer。接下来章节中,分别对dubbo provider和Dubbo consumer进行讲解。

Dubbo Provider配置

Provider 配置详解

配置Dubbo Provider有4种方式:XML配置,properties方式配置,API调用方式配置,注解方式配置。

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://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">  
    <dubbo:application name="hello-world-app" />  
    <dubbo:registry address="multicast://224.5.6.7:1234" />  
    <dubbo:protocol name="dubbo" port="20880" />  
    <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />  
    <dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />  
</beans>

上面样例中,注意下dubbo schema的写法:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
支持的配置标签

标签

用途

解释

dubbo:service/

服务配置

用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

dubbo:reference/

引用配置

用于创建一个远程服务代理,一个引用可以指向多个注册中心

dubbo:protocol/

协议配置

用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

dubbo:application/

应用配置

用于配置当前应用信息,不管该应用是提供者还是消费者

dubbo:module/

模块配置

用于配置当前模块信息,可选

dubbo:registry/

注册中心配置

用于配置连接注册中心相关信息

dubbo:monitor/

监控中心配置

用于配置连接监控中心相关信息,可选

dubbo:provider/

提供方配置

当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选

dubbo:consumer/

消费方配置

当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

dubbo:method/

方法配置

用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息

dubbo:argument/

参数配置

用于指定方法参数配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ogqfwdk9-1662421744353)(https://cdn.yuque.com/lark/0/2018/png/15841/1527849348155-8423d401-9ea4-4dc6-8720-d9e3d90963b6.png “undefined”)]

配置之间关系图

配置项详解
  • <dubbo:application name=“hello-world-app” />
    用于指定应用名,这里需要保证应用名唯一,这个应用名在后续的console admin中可以在列表中显示,方便管理。
  • <dubbo:registry address=“multicast://224.5.6.7:1234” />
    注册中心配置,和服务发现的具体机制有关系。可以是zookeeper地质,也可以eureka地质。上面这个是广播地址,在本地服务调用的测试过程中非常方便。
  • <dubbo:protocol name=“dubbo” port=“20880” />
    这里是传输的协议和默认端口,一般不需要更改。

接下来重点讲解下dubbo:service/的配置。

  • dubbo:service/支持的主要属性列表:
    | 属性名 | 说明 |

version

版本号

scope

服务可见性, 值为:local 或者 remote,默认为remote

actives

最大的激活的请求数

async

方法调用是否异步,默认为false

cache

服务缓存,可选值:lru/threadlocal/jcache

callbacks

callback实例的限制

generic

泛化调用,可以绕过

class

Service的实现的类名

connections

这个服务里的连接数

delay

发布服务延迟的毫秒数

executes

服务执行的请求上限

retries

超时重试次数

timeout

调用超时时间

其他配置属性请参考xsd:http://dubbo.apache.org/schema/dubbo/dubbo.xsd

  • dubbo:method/作为dubbo:service/的子元素,它可以针对方法进行配置。比较常用的属性有:

属性名

说明

executes

服务执行的请求上限

retries

超时重试次数

timeout

调用超时时间

其他属性,可以参考上面的xsd。

配置的覆盖关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9sk2EvVW-1662421744354)(https://cdn.yuque.com/lark/0/2018/png/15841/1527849374313-94a5ea24-0e72-4d83-871b-e0e95eab646a.png “undefined”)]

配置的覆盖关系图

这里的覆盖关系包含了Provider和Consumer两端的配置,如果对consumer有疑问,可以参考后一章节的consumer章节之后再来理解。

dubbo.properties方式配置

如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置,可以使用 dubbo.properties 作为缺省配置。

Dubbo 将自动加载 classpath 根目录下的 dubbo.properties,可以通过JVM启动参数 -Ddubbo.properties.file=xxx.properties 改变缺省配置位置。

dubbo.properties配置样例
# 应用名
dubbo.application.name=dubbodemo-provider
# 注册中心地址
dubbo.registry.address=zookeeper://localhost:2181
# 广播的注册中心样例
#dubbo.registry.address=multicast://224.5.6.7:1234
# 调用协议地址
dubbo.protocol.name=dubbo
dubbo.protocol.port=28080
映射规则

将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行

  • 比如:dubbo.application.name=foo等价于
  • 比如:dubbo.registry.address=10.20.153.10:9090等价于

如果 XML 有多行同名标签配置,可用 id 号区分,如果没有 id 号将对所有同名标签生效

  • 比如:dubbo.protocol.rmi.port=1234等价于 2
  • 比如:dubbo.registry.china.address=10.20.153.10:9090等价于
覆盖策略

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtItILsg-1662421744355)(https://cdn.yuque.com/lark/0/2018/png/15841/1527849393591-2c3de248-1b3d-47d3-bd10-8b415e9fcd39.png “undefined”)]

  • JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
  • XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。
  • Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。

注意:

  1. 如果 classpath 根目录下存在多个 dubbo.properties,比如多个 jar 包中有 dubbo.properties,Dubbo 会任意加载,并打印 Error 日志,后续可能改为抛异常。
  2. 协议的 id 没配时,缺省使用协议名作为 id
annotation
Service注解暴露服务
import com.alibaba.dubbo.config.annotation.Service;

@Service(timeout = 5000)
public class AnnotateServiceImpl implements AnnotateService {
// …
}

javaconfig形式配置公共模块
@Configuration
public class DubboConfiguration {

}

这种方式的配置和前面用xml配置的方式是一样的效果。

指定dubbo扫描路径
@SpringBootApplication
@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service.impl")
public class ProviderTestApp {
    // ...
}

或者使用spring bean xml配置方式:

<dubbo:annotation package="com.chanshuyi.service.impl" />
api直接触发
import com.alibaba.dubbo.rpc.config.ApplicationConfig;
import com.alibaba.dubbo.rpc.config.RegistryConfig;
import com.alibaba.dubbo.rpc.config.ProviderConfig;
import com.alibaba.dubbo.rpc.config.ServiceConfig;
import com.xxx.XxxService;
import com.xxx.XxxServiceImpl;

// 服务实现
XxxService xxxService = new XxxServiceImpl();

// 当前应用配置
ApplicationConfig application = new ApplicationConfig();
application.setName(“xxx”);

// 连接注册中心配置
RegistryConfig registry = new RegistryConfig();
registry.setAddress(“10.20.130.230:9090”);
registry.setUsername(“aaa”);
registry.setPassword(“bbb”);

// 服务提供者协议配置
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName(“dubbo”);
protocol.setPort(12345);
protocol.setThreads(200);

// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口

// 服务提供者暴露服务配置
ServiceConfig service = new ServiceConfig(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏
service.setApplication(application);
service.setRegistry(registry); // 多个注册中心可以用setRegistries()
service.setProtocol(protocol); // 多个协议可以用setProtocols()
service.setInterface(XxxService.class);
service.setRef(xxxService);
service.setVersion(“1.0.0”);

// 暴露及注册服务
service.export();

一般在spring应用中,不推荐使用这种方式。 具体的含义这里不做解释,可以通过github查看源码。

Provider 接口和实现

上面章节更多从配置角度出发,接下来通过一个完整的例子,来讲解下dubbo provider的完整使用。

这个例子中只有一个服务UserReadService,有一个方法 getUserById。 需要将这个服务通过Dubbo暴露给远程的服务。具体的步骤如下:

1.创建工程
如果本来已经有工程,可以忽略。创建一个spring boot工程,可以通过 https://start.spring.io/ 创建。
2.定义接口
定义接口:UserReadService

public interface UserReadService{
public User getUserById(Long userId);
}

这个接口一般来说会放到独立的jar包里,作为client包。 其他应用要消费这个服务的时候,一般来说需要应用引用这个client包。(除了泛化调用)
3.实现接口
实现UserReadService, 当前实现部署在Provider的应用中。

public UserReadServiceImpl implements UserReadService{
    public User getUserById(Long userId){
        return xxx;
    }
}

4.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://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">  
    <dubbo:application name="hello-world-app" />  
    <dubbo:registry address="multicast://224.5.6.7:1234" />  
    <dubbo:protocol name="dubbo" port="20880" />  
    <bean id="userReadService" class="com.package.UserReadServiceImpl"/>
    <dubbo:service interface="com.package.UserReadService" ref="userReadService" />  
</beans>

Dubbo配置的其他方式可以参考上一章节的相关配置,或者使用集成dubbo spring boot starter方式。

    <!-- 登录查看 begin -->
            <!-- 登录查看 end -->
</div>

    <div class="copyright-outer-line yq-blog-sem-remove">
                    <div class="yq-blog-sem-remove copyright-notice">
            本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
        </div>
                            </div>
<div class="yq-blog-sem-remove" style="text-align:center; margin-top:10px"><img src="//img.alicdn.com/tfs/TB1lKbLGb9YBuNjy0FgXXcxcXXa-512-512.png" style="width: 144px; height:144px"><p>用云栖社区APP,舒服~</p></div>
                    <div class="yq-blog-sem-remove" style="margin-top: 20px;font-size: 12px;line-height: 1.8;color:#373d41;font-family:PingFangSC-Regular;word-break: break-all;">
            【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!&nbsp;&nbsp;<a href="https://yq.aliyun.com/ask/133867" target="_blank" rel="nofollow">详情请点击</a>
        </div>
        
<div class="footer-detail yq-blog-sem-remove yq-blog-interaction clearfix">
    <a href="#comment" class="icon-pinglun comment_btn">评论  (<i>0</i>)</a>
    <span id="vote_btn" has_voted="" data-aid="601751" data-islogin="false" title="点赞" class="icon-zan opt-btn vote_btn ">点赞 (<span id="vote_num">1</span>)</span>
    <span id="mark_btn" has_marked="" data-aid="601751" data-islogin="false" title="收藏" class="icon-love opt-btn mark_btn ">收藏 (<span id="mark_num">1</span>)</span>
    <dl class="share-to">
        <dt>分享到:</dt>
        <dd>
            <a href="http://service.weibo.com/share/share.php?title=Dubbo%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95-Dubbo+Provider%E9%85%8D%E7%BD%AE+%E6%9C%AC%E7%AB%A0%E8%8A%82%E4%B8%BB%E8%A6%81%E8%AE%B2%E8%BF%B0%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEdubbo%EF%BC%8C%E6%8C%89%E7%85%A7%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F%E4%B8%8A%E5%88%86%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%88%86%E4%B8%BA%EF%BC%9AXML%E9%85%8D%E7%BD%AE%EF%BC%8Cproperties%E6%96%B9%E5%BC%8F%E9%85%8D%E7%BD%AE%EF%BC%8C%E6%B3%A8%E8%A7%A3%E6%96%B9%E5%BC%8F%E9%85%8D%E7%BD%AE%EF%BC%8CAPI%E8%B0%83%E7%94%A8%E6%96%B9%E5%BC%8F%E9%85%8D%E7%BD%AE%E3%80%82%0D%0A%E6%8C%89%E7%85%A7%E5%8A%9F%E8%83%BD%E8%A7%92%E5%BA%A6%E8%BF%9B%E8%A1%8C%E5%88%92%E5%88%86%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%88%86%E4%B8%BADubbo+Provider%E5%92%8CDubbo+Consumer%E3%80%82&amp;url=https%3A%2F%2Fyq.aliyun.com%2Farticles%2F601751" target="_blank" class="icon-weibo"></a>
            <div class="wechat">
                <i class="icon-weixin"></i>
                <img src="/api/qrcode?size=140&amp;key=36bed36de15cad4662edce7329ba29b6d70cdc28&amp;text=https%3A%2F%2Fyq.aliyun.com%2Farticles%2F601751" alt="">
            </div>
        </dd>
    </dl>
</div>
<div class="yq-blog-pre-next yq-blog-sem-remove">
    <ul class="about-c-list">
                        <li><a href="/articles/601748">上一篇:第一个 Dubbo 应用</a></li>
                                    <li><a href="/articles/601752">下一篇:阿里云ACM英文版上线,论“全局配置”在电商国际化微服务平台建设中的妙用</a></li>
                </ul>
</div>
        <div class="yq-blog-related-articles yq-blog-sem-remove">
        <h3 class="title-info">相关文章</h3>
        <ul class="about-c-list">
                                <li>
                    <a href="/articles/625847">
                                                        服务化改造实践(一)| Dubbo + ZooKeepe…
                                                </a>
                </li>
                                <li>
                    <a href="/articles/601748">
                                                        第一个 Dubbo 应用
                                                </a>
                </li>
                                <li>
                    <a href="/articles/142902">
                                                        Dubbo协议与连接控制
                                                </a>
                </li>
                                <li>
                    <a href="/articles/224649">
                                                        架构师之路-在Dubbo中开发REST风格的远程调用
                                                </a>
                </li>
                                <li>
                    <a href="/articles/222629">
                                                        架构师之路-在Dubbo中开发REST风格的远程调用
                                                </a>
                </li>
                                <li>
                    <a href="/articles/610737">
                                                        Dubbo学习1-Hello world
                                                </a>
                </li>
                                <li>
                    <a href="/articles/27895">
                                                        基于Dubbo框架构建分布式服务
                                                </a>
                </li>
                                <li>
                    <a href="/articles/58510">
                                                        Great Dubbo(上)
                                                </a>
                </li>
                                <li>
                    <a href="/articles/646848">
                                                        线下Springboot+dubbo应用迁kuberne…
                                                </a>
                </li>
                                <li>
                    <a href="/articles/636943">
                                                        Dubbo源码分析1:生产者启动分析
                                                </a>
                </li>
                        </ul>
    </div>
    <div class="yq-blog-comment yq-blog-sem-remove">
    <h3 class="title-info">网友评论</h3>
                <section class="comments-box clearfix">
            <div class="media-list comments" id="comments">


            <form accept-charset="UTF-8" action="/comments" method="POST" data-remote="true" data-target="#comments" class="js-comment-create js-active-on-valid css-unlogin">
                <input type="hidden" name="type" value="article">
                <input type="hidden" name="yunqi_csrf" value="YBSY8BAUYM">
                <input type="hidden" name="isCheck" value="1">
                <input type="hidden" name="pid" value="601751">

                <div class="form-group">
                    <div class="editor">
                                                        <div class="login_tips" id="comment">登录后可评论,请 <a id="fast_login" href="https://account.aliyun.com/login/login.htm?from_type=yqclub&amp;oauth_callback=https%3A%2F%2Fyq.aliyun.com%2Farticles%2F601751%3Fdo%3Dlogin" class="s4" hidefocus="true" rel="nofollow">登录</a> 或 <a href="https://account.aliyun.com/register/register.htm?from_type=yqclub&amp;oauth_callback=https%3A%2F%2Fyq.aliyun.com%2Farticles%2F601751%3Fdo%3Dlogin" target="_blank" class="s4" hidefocus="true" rel="nofollow">注册</a></div>
                                                </div><!-- /.editor  -->
                </div>


                <div class="form-group text-right">
                                                <a href="#modal-login" class="comment_button" data-toggle="modal">评论</a>
                                        </div>
            </form>
        </section>
        </div>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值