Wenn Sie sich bereits für interessieren Rand links: 27, 31, 35, 0,05; Schriftfamilie: „Operator Mono“, Consolas, Monaco, Monospace; 239, 112, 96);">DubboDubbo熟练使用了,那这篇文章不太适合你,但如果想了解Dubbo,想学习Dubbo,那就非常适合你。
DubboWenn Sie damit vertraut sind, ist dieser Artikel nicht für Sie geeignet, aber wenn Sie mehr wissen möchten
Dubbo
, will lernen
🎜
Was ist Dubbo? 🎜 🎜
🎜Dubbo wurde ursprünglich von Alibaba entwickelt und später zu Apache, also nennen wir es Apache Dubbooder nennen Sie es einfach Dubbo. 🎜🎜Falsche Aussprache: diubo, dubo
Richtige Aussprache: |ˈdʌbəʊ|
Dubbos sechs Kernfunktionen
Hohe Leistung für SchnittstellenagentenRPC Aufruf
RPC调用
智能容错和负载均衡
服务自动注册和发现
高度可扩展能力
运行期流量调度
可视化的服务治理与运维。
开发中,我们都喜欢把Dubbo简称为RPC开源框架。
什么是RPC?
RPC是Remote Procedure Call的简称,翻译过来就是:远程过程调用
Intelligente Fehlertoleranz und Lastausgleich li>
Automatische Registrierung und Erkennung von Diensten
Hoch skalierbare FunktionenLaufzeit-Verkehrsplanung🎜🎜Visualisierte Dienste Governance und Betrieb. 🎜Während der Entwicklung verwenden wir alle gerne Dubbo wird bezeichnet als RPCOpen-Source-Framework. 🎜
Was ist RPC?
🎜RPC ist Remote Procedure Calls Abkürzung, übersetzt als: Remote Procedure Call. 🎜🎜🎜Das einfache Verständnis ist, dass ein Knoten die von einem anderen Knoten bereitgestellten Dienste anfordert. 🎜🎜🎜Laienhaft ausgedrückt:🎜
Zwei Server A und B stellen eine Anwendung serverA,在服务器B上部署一个应用程序serverB。此时,serverA想调用serverB auf Server A bereit. Eine bestimmte Methode kann nicht direkt aufgerufen werden, da sie sich nicht auf demselben Server befindet. Die Semantik des Aufrufs und die Daten des Aufrufs müssen über das Netzwerk übertragen werden.
Rufen Sie Remote-Methoden genauso auf wie lokale Methoden.
In unserer Entwicklung verwenden Aufrufe zwischen zwei Diensten (Diensten auf verschiedenen Servern) normalerweise HTTP REST.
RPC-Framework
Tatsächlich gibt es viele RPC-Frameworks auf dem Markt, und Dubbo ist nur eines davon. Zum Beispiel:
gRPC ist ein leistungsstarkes, universelles Open-Source-RPC-Framework, das ProtoBuf zur Definition von Diensten verwendet. ProtoBuf ist ein von Google entwickeltes Datenserialisierungsprotokoll einfache Syntax. Darüber hinaus unterstützt gRPC mehrere Sprachen und kann automatisch Client- und Server-Funktionsbibliotheken basierend auf Sprachen generieren.
Thrift entstand aus Facebook und wurde später wie Dubbo der Apache Foundation vorgelegt, um Thrift zu einem Open-Source-Projekt zu machen. Facebook hat Thrift entwickelt, um das Problem der großen Datenmengenübertragung und Kommunikation zwischen Facebook-Systemen sowie der unterschiedlichen Sprachumgebungen zwischen Systemen zu lösen, die plattformübergreifende Probleme erfordern.
Motan ist ein Open-Source-Java-RPC-Framework von Sina Weibo. Dem offiziellen Dokument zufolge wird es häufig auf der Weibo-Plattform verwendet und führt täglich fast 100 Milliarden Anrufe für Hunderte von Diensten durch.
...
Dubbo-Kerncharakter
Lass uns einen Blick darauf werfenKernrolle in der Dubbo-Architektur: Dubbo架构中的核心角色:
🎜Dieses Bild stammt von der offiziellen Website. Lassen Sie uns eine kurze Einführung in das Bild unten geben:🎜
Registrierung
🎜Registrierungscenter. Verantwortlich für die Registrierung und Suche nach Dienstadressen, Dienst Existence of Provider , in Consumer</code > . 🎜<h4 data-tool=" mdnice>Anbieter<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">Dienstleister. Beim Start registriert es sich bei der Registry, kapselt die Adresse seines eigenen Dienstes und zugehörige Konfigurationsinformationen in eine URL und fügt sie ZooKeeper hinzu. </p>
<h4 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;">Verbraucher</h4>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">Verbraucher bedienen. Wenn es startet, wird es die Registry abonnieren. Der Abonnementvorgang stellt die Verbindung von <code style='font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);'>ZooKeeper 中获取 Provider 注册的 URL,并在 ZooKeeper 中添加相应的监听器。获取到 Provider URL 之后,Consumer 会根据负载均衡算法从多个 Provider 中选择一个 Provider 并与其建立连接,最后发起对 Provider 的 RPC 调用。如果 Provider URL 发生变更,Consumer 将会通过之前订阅过程中在注册中心添加的监听器,获取到最新的 Provider URL 信息,进行相应的调整,比如断开与宕机 Provider 的连接,并与新的 Provider her.Bei den Funktionen „Consumer“ und „Provider 建立的是长连接,且 Consumer 会缓存 Provider 信息,所以一旦连接建立,即使注册中心宕机,也不会影响已运行的 Provider 和 Consumer。
Es entwickelt sich obszön und explodiert im späteren Stadium (im frühen Stadium achtet man vielleicht nicht besonders darauf, aber im späteren Stadium duftet es besonders stark)
Container:
Dienst läuft Container. ist ein separater Container, da Dienste ihn normalerweise nicht benötigen (27, 31, 35, 0,05);Schriftfamilie: „Operator Mono“, Consolas, Monaco, Menlo, Monospace;Wortumbruch: Break-All;Farbe: RGB (239, 112, 96);">Tomcat、JBoss und andere Web-Container-Funktionen, ist es nicht erforderlich, einen Web-Container zum Laden von Diensten zu verwenden. Der Service-Container ist nur eine einfache Hauptmethode und lädt einen einfachen Spring-Container, um den Service verfügbar zu machen. Tomcat、JBoss等Web容器的特性,没必要用Web容器去加载服务。服务容器只是一个简单的main方法,并加载一个简单的Spring容器,用于暴露服务。
Oben Darin Im Bild gibt es mehrere Zeichen und viele Linien. Lassen Sie uns dies im Folgenden kurz erklären. 🎜
Der Dienstcontainer ist für das Starten, Laden und Ausführen des Dienstanbieters verantwortlich.
Dienstanbieter bei Registrieren Sie beim Start die von Ihnen bereitgestellten Dienste im Registrierungscenter.
Dienstkonsumenten unter Startup, abonnieren Sie das Registrierungscenter für die Dienste, die Sie benötigen.
Registration Center Return Die Adressliste des Dienstanbieters wird an den Verbraucher weitergegeben. Bei einer Änderung übermittelt das Registrierungszentrum die Änderungsdaten basierend auf der langen Verbindung an den Verbraucher.
Dienstkonsumenten, Wählen Sie aus der Provider-Adressliste basierend auf dem Soft-Load-Balancing-Algorithmus einen Provider zum Anrufen aus. Wenn der Anruf fehlschlägt, wählen Sie einen anderen Provider zum Anrufen aus.
Dienstkonsumenten und Provider, sammeln die Anzahl der Anrufe und die Anrufzeit im Speicher und senden regelmäßig jede Minute statistische Daten an die Überwachungszentrale.
🎜AufgrundDubbo wurde vom technischen Team von Alibaba entwickelt, daher ist die Dokumentation sehr wichtig Für uns in China ist es aus menschlicher Sicht recht freundlich. Mit einem Wort: cool! 🎜
Außerdem Dubbo官网上很多东西,我们就不在这里一一介绍了。
建议大家都去官网逛逛。
话不多说,咱们先来嗨一把!
demo案例1
我们先来搞一个没有注册中心的案例。
我们搭建一个项目,并创建三个module:
dubbo-demo
dubbo-demo-api
dubbo-demo-provider
dubbo-demo-consumer
Es wird jedem empfohlen, die offizielle Website aufzurufen.
Ohne weitere Umschweife, lasst uns zuerst Spaß haben!
Demo-Fall 1
Beginnen wir mit einem Fall ohne Registrierungszentrum.
###set log levels###
log4j.rootLogger=debug, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n
Nach dem Login kopieren
在定义一个业务实现类:DemoServiceImpl
package com.tian.dubbo.service;
public class DemoServiceImpl implements DemoService {
public String sayHello(String msg) {
System.out.println("msg= " + msg);
return "SUCCESS";
}
}
Nach dem Login kopieren
再就是定义一个provider的启动类:ProviderMain
package com.tian.dubbo;
import org.apache.dubbo.container.Main;
public class ProviderMain {
public static void main(String[] args) {
Main.main(args);
}
}
Nach dem Login kopieren
Nach dem Login kopieren
< blockquote data-tool="mdnice editor" style="border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;color: rgb(106, 115, 125 );padding: 10px 10px 10px 20px;margin-bottom: 20px;margin-top: 20px;border-left-color: rgb(239, 112, 96);background: rgb(255, 249, 249);"> < p style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;color: black;line-height: 26px;">Sowohl Verbraucher- als auch Anbieterprojekte müssen diese beiden Abhängigkeiten hinzufügen.
api
🎜 Die API definiert hauptsächlich Serviceschnittstellen und einige Toolklassen, die hauptsächlich von Verbrauchern und Anbietern gemeinsam genutzt werden. 🎜🎜In der API definieren wir nur eine Serviceschnittstelle:
package com.tian.dubbo;
import com.tian.dubbo.service.DemoService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ConsumerMain {
public static void main(String[] args) {
DemoService demoService = null;
ApplicationContext context = new ClassPathXmlApplicationContext
("classpath:META-INF/spring/application.xml");
demoService = context.getBean(DemoService.class);
//调用服务
System.out.println(demoService.sayHello("tian"));
}
}
Nach dem Login kopieren
Nach dem Login kopieren
前面,我们已经把provider成功启动了,下面我们就来启动ConsumerMain。
从日志可以看出我们已经成功调用了provider,我们再来看看provider的日志输出:
也成功的输出了我们想要的。
到此,一个简单的入门无注册中心(通过url直接调用)的方式就完成了。
url ist bei der Entwicklung des gemeinsamen Debuggens immer noch sehr nützlich, da dadurch die Abhängigkeit vom Registrierungscenter beseitigt wird.
Demo-Fall 2
Wir haben bereits zuvor ohne Registrierungszentrum demonstriert, jetzt demonstrieren wir mit Registrierungscenter.
Dubbo目前差不多能支持市面上所有的注册中心:
consul
zookeeper
eureka
redis
etcd
nacos
....
我们在实际开发中,Dubbo注册中心大部分都是使用Zookeeper和Nacos。
下面们基于Zookeeper
< li>consul
zookeeper
eureka
redis
etcd
nacos
....
In der tatsächlichen Entwicklung, < Codestil ="Schriftgröße: 14px;Padding: 2px 4px;Randradius: 4px;Rand rechts: 2px;Rand links: 2px;Hintergrundfarbe: rgba(27, 31, 35, 0,05);Schriftfamilie: „Operator Mono“, Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(239, 112, 96);">Dubbo Die meisten Registrierungszentren verwenden Zookeeper und Nacos. Das Folgende basiert auf Codeebene🎜🎜Ich habe es basierend auf dem vorherigen Fall geändert. Die Transformation muss nur an zwei Stellen angepasst werden: 🎜
Das obige ist der detaillierte Inhalt vonDubbo-Quellcode-Analyse: Leitfaden für Einsteiger. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn