<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python SDK on Apache Dubbo</title><link>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/</link><description>Recent content in Python SDK on Apache Dubbo</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/index.xml" rel="self" type="application/rss+xml"/><item><title>Quick Start</title><link>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/quick-start/</guid><description>&lt;p>This guide will help you get started with Dubbo in Python with a simple working example. See the full &lt;a href="https://github.com/apache/dubbo-python/tree/main/samples/helloworld">example here&lt;/a>.&lt;/p>
&lt;h2 id="1-prerequisites">1. Prerequisites&lt;/h2>
&lt;ul>
&lt;li>Python 3.11 or higher&lt;/li>
&lt;li>Compatible &lt;code>pip&lt;/code> version&lt;/li>
&lt;/ul>
&lt;h2 id="2-install-dubbo-python">2. Install Dubbo-Python&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Install Directly&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>pip install apache-dubbo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install from source&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git clone https://github.com/apache/dubbo-python.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#b58900">cd&lt;/span> dubbo-python &lt;span style="color:#719e07">&amp;amp;&amp;amp;&lt;/span> pip install .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h2 id="3-build-a-dubbo-service">3. Build a Dubbo Service&lt;/h2>
&lt;h3 id="building-the-dubbo-server">Building the Dubbo Server&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">import&lt;/span> dubbo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">from&lt;/span> dubbo.configs &lt;span style="color:#719e07">import&lt;/span> ServiceConfig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">from&lt;/span> dubbo.proxy.handlers &lt;span style="color:#719e07">import&lt;/span> RpcMethodHandler, RpcServiceHandler
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">class&lt;/span> &lt;span style="color:#268bd2">UnaryServiceServicer&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">def&lt;/span> &lt;span style="color:#268bd2">say_hello&lt;/span>(&lt;span style="color:#268bd2">self&lt;/span>, message: &lt;span style="color:#b58900">bytes&lt;/span>) &lt;span style="color:#719e07">-&amp;gt;&lt;/span> &lt;span style="color:#b58900">bytes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#b58900">print&lt;/span>(&lt;span style="color:#2aa198">f&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Received message from client: &lt;/span>&lt;span style="color:#2aa198">{&lt;/span>message&lt;span style="color:#2aa198">}&lt;/span>&lt;span style="color:#2aa198">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">b&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Hello from server&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">def&lt;/span> &lt;span style="color:#268bd2">build_service_handler&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># build a method handler&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> method_handler &lt;span style="color:#719e07">=&lt;/span> RpcMethodHandler&lt;span style="color:#719e07">.&lt;/span>unary(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> method&lt;span style="color:#719e07">=&lt;/span>UnaryServiceServicer()&lt;span style="color:#719e07">.&lt;/span>say_hello, method_name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;unary&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># build a service handler&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service_handler &lt;span style="color:#719e07">=&lt;/span> RpcServiceHandler(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service_name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;org.apache.dubbo.samples.HelloWorld&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> method_handlers&lt;span style="color:#719e07">=&lt;/span>[method_handler],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> service_handler
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">if&lt;/span> __name__ &lt;span style="color:#719e07">==&lt;/span> &lt;span style="color:#2aa198">&amp;#34;__main__&amp;#34;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># build service config&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service_handler &lt;span style="color:#719e07">=&lt;/span> build_service_handler()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service_config &lt;span style="color:#719e07">=&lt;/span> ServiceConfig(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service_handler&lt;span style="color:#719e07">=&lt;/span>service_handler, host&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;127.0.0.1&amp;#34;&lt;/span>, port&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">50051&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># start the server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#719e07">=&lt;/span> dubbo&lt;span style="color:#719e07">.&lt;/span>Server(service_config)&lt;span style="color:#719e07">.&lt;/span>start()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#b58900">input&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;Press Enter to stop the server...&lt;/span>&lt;span style="color:#cb4b16">\n&lt;/span>&lt;span style="color:#2aa198">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="building-the-dubbo-client">Building the Dubbo Client&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">import&lt;/span> dubbo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">from&lt;/span> dubbo.configs &lt;span style="color:#719e07">import&lt;/span> ReferenceConfig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">class&lt;/span> &lt;span style="color:#268bd2">UnaryServiceStub&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">def&lt;/span> __init__(&lt;span style="color:#268bd2">self&lt;/span>, client: dubbo&lt;span style="color:#719e07">.&lt;/span>Client):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">self&lt;/span>&lt;span style="color:#719e07">.&lt;/span>unary &lt;span style="color:#719e07">=&lt;/span> client&lt;span style="color:#719e07">.&lt;/span>unary(method_name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;unary&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">def&lt;/span> &lt;span style="color:#268bd2">say_hello&lt;/span>(&lt;span style="color:#268bd2">self&lt;/span>, message: &lt;span style="color:#b58900">bytes&lt;/span>) &lt;span style="color:#719e07">-&amp;gt;&lt;/span> &lt;span style="color:#b58900">bytes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#268bd2">self&lt;/span>&lt;span style="color:#719e07">.&lt;/span>unary(message)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">if&lt;/span> __name__ &lt;span style="color:#719e07">==&lt;/span> &lt;span style="color:#2aa198">&amp;#34;__main__&amp;#34;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># Create a client&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> reference_config &lt;span style="color:#719e07">=&lt;/span> ReferenceConfig&lt;span style="color:#719e07">.&lt;/span>from_url(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;tri://127.0.0.1:50051/org.apache.dubbo.samples.HelloWorld&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dubbo_client &lt;span style="color:#719e07">=&lt;/span> dubbo&lt;span style="color:#719e07">.&lt;/span>Client(reference_config)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> unary_service_stub &lt;span style="color:#719e07">=&lt;/span> UnaryServiceStub(dubbo_client)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># Call the remote method&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> result &lt;span style="color:#719e07">=&lt;/span> unary_service_stub&lt;span style="color:#719e07">.&lt;/span>say_hello(&lt;span style="color:#2aa198">b&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Hello from client&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#b58900">print&lt;/span>(result)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="4-run-the-dubbo-service">4. Run the Dubbo Service&lt;/h2>
&lt;p>Navigate to the Quick Start example directory:&lt;/p></description></item><item><title>Custom Serialization</title><link>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/custom-serialization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/custom-serialization/</guid><description>&lt;p>See the full &lt;a href="https://github.com/apache/dubbo-python/tree/main/samples/serialization">example here&lt;/a>&lt;/p>
&lt;p>Python is a dynamic language, and its flexibility makes it challenging to design a universal serialization layer as seen in other languages. Therefore, we have removed the &amp;ldquo;serialization layer&amp;rdquo; and left it to the users to implement (since users know the formats of the data they will pass).&lt;/p>
&lt;p>Serialization typically consists of two parts: serialization and deserialization. We have defined the types for these functions, and custom serialization/deserialization functions must adhere to these &amp;ldquo;formats.&amp;rdquo;&lt;/p></description></item><item><title>Streaming Communication Model</title><link>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/streaming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/streaming/</guid><description>&lt;p>See the full &lt;a href="https://github.com/apache/dubbo-python/tree/main/samples/stream">example here&lt;/a>&lt;/p>
&lt;p>Dubbo-Python supports streaming calls, including &lt;code>ClientStream&lt;/code>, &lt;code>ServerStream&lt;/code>, and &lt;code>BidirectionalStream&lt;/code> modes.&lt;/p>
&lt;p>Streaming calls can be divided into write-streams and read-streams. For &lt;code>ClientStream&lt;/code>, it’s multiple writes with a single read; for &lt;code>ServerStream&lt;/code>, a single write with multiple reads; and &lt;code>BidirectionalStream&lt;/code> allows multiple writes and reads.&lt;/p>
&lt;h3 id="write-stream">Write-Stream&lt;/h3>
&lt;p>Write operations in streaming calls can be divided into single write (&lt;code>ServerStream&lt;/code>) and multiple writes (&lt;code>ClientStream&lt;/code> and &lt;code>BidirectionalStream&lt;/code>).&lt;/p>
&lt;h4 id="single-write">Single Write&lt;/h4>
&lt;p>Single write calls are similar to unary mode. For example:&lt;/p></description></item><item><title>Service Discovery</title><link>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/service-discovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3199--dubbo.netlify.app/en/overview/mannual/python-sdk/service-discovery/</guid><description>&lt;p>See the full &lt;a href="https://github.com/apache/dubbo-python/tree/main/samples/registry">example here&lt;/a>&lt;/p>
&lt;p>Using service registration and discovery is very simple. In fact, it only requires two additional lines of code compared to point-to-point calls. Before using this feature, we need to install the relevant registry client. Currently, Dubbo-python only supports &lt;code>Zookeeper&lt;/code>, so the following demonstration will use &lt;code>Zookeeper&lt;/code>.&lt;/p>
&lt;p>Similar to before, we need to clone the Dubbo-python source code and install it. However, in this case, we also need to install the &lt;code>Zookeeper&lt;/code> client. The commands are:&lt;/p></description></item></channel></rss>