干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言

不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利。

如何找到孙帅本人

本文内容整理自《孙哥说Dubbo系列视频课程》,老师实力十分雄厚,B站搜孙帅suns可以找到本人,或者直接添加老师微信号suns45

第一章

1:协议端口

	
    <dubbo:application name="dubbo-02-provider"/>
    
    <dubbo:protocol name="dubbo" port="20880"/>

补充说明1:
显示指定Dubbo服务启动的端口号:一个服务器上起多个Provider都这样显示的指定port端口号的话,会造成端口号冲突。

解决方式:我们可以port设置为-1,服务启动时默认采用20880(dubbo协议默认端口),此端口被占用默认会+1,一直到加端口不占用为止。强烈建立端口号设置为-1

    
    <dubbo:protocol name="dubbo" port="-1"/>

2:第一个程序运行过程浅析

从形象和概念上进行一个分析,源码后续在进行分析~

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充_第1张图片

解释说明1:

提供者里边我们编写了一个Service层之后,基xml里边的配置暴露Dubbo服务,真正将一个Service发布成一个Dubbo服务的是这个标签。为暴露出来的服务齐了一个名字,指定了通信的协议和端口号。

消费者当中也配置了dubbo服务的名称。通过指定了PRC的接口和对象id,并将此对象交由Spring工厂进行管理。同时也指定了所发布的提供者的UserService的URL。

消费者和提供者之间进行通信是跨越JVM实例通信的,是一种跨进程通讯,这种通讯方式一定是走网络通信的。所以,我们的URL当中包含了提供者暴露的Dubbo服务的IP、端口号、协议、具体的接口的全限定名称,它具体涨这个样子

    <dubbo:reference interface="com.suns.service.UserService" id="userService"  
    url="dubbo://192.168.8.1:20880/com.suns.service.UserService"/>

分析到这里,我们可以看到概念上,我们整个流程是通的。

3:两个问题

问题分析1:

为什么提供者提供了UserService的实现,在另外一个虚拟机的消费者当中可以记性调用呢?消费者当中调用的到底是什么?

并没有直接调用远端JVM实例当中的UserServiceImpl,实际上是调用的是UserServiceImpl的代理对象 Proxy,这个代理对象是在消费者的JVM实例当中的。这个对象是从消费者的JVM实例当中的Spring工厂获取的。比如:($Proxy20@4109)是基于JDK的动态代理的方式创建的,他是基于Proxy.newProcyInstance();

问题分析2:

代理的核心工作是什么呢?

代理设计模式在Java开发中是广泛使用的。代理仿佛就是一个伟大而又理想的中间商,让你更好的去访问后续的内容。消费者和实际的消费对象之间是割裂的,被代理对象所连接。

代理对象被Consumer实际调用,对consumer屏蔽了网络的通信过程(通信方式 协议 序列化),最后通过代理传递通信的数据。
通信必须得有对方的地址,所以代理对象当中必须得有一个URL

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充_第2张图片

你可能感兴趣的:(Dubbo专栏,dubbo)