<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: mxsm</title>
    <description>The latest articles on DEV Community by mxsm (@mxsm-cn).</description>
    <link>https://dev.to/mxsm-cn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1272789%2F246ab210-1bc1-4323-b5de-f52ff5be05a9.jpg</url>
      <title>DEV Community: mxsm</title>
      <link>https://dev.to/mxsm-cn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mxsm-cn"/>
    <language>en</language>
    <item>
      <title>Rocketmq Name Server Implementation with Rust</title>
      <dc:creator>mxsm</dc:creator>
      <pubDate>Fri, 16 Feb 2024 15:31:50 +0000</pubDate>
      <link>https://dev.to/mxsm-cn/rocketmq-rust-name-server-implementation-2iga</link>
      <guid>https://dev.to/mxsm-cn/rocketmq-rust-name-server-implementation-2iga</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I am Ant carrying an elephant (Apache EventMesh PMC&amp;amp;Committer). If this article is helpful to you, give &lt;a href="https://github.com/mxsm/rocketmq-rust" rel="noopener noreferrer"&gt;Rocketmq-rust a star&lt;/a&gt;, follow me on &lt;a href="https://github.com/mxsm" rel="noopener noreferrer"&gt;GitHub: mxsm&lt;/a&gt;, and if there are any inaccuracies, please correct them by creating an &lt;a href="https://github.com/mxsm/rocketmq-rust/issues" rel="noopener noreferrer"&gt;ISSUE or submitting a PR&lt;/a&gt;~ Thank you! Email: &lt;a href="mailto:mxsm@apache.com"&gt;mxsm@apache.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. Overview of Rocketmq-rust Name Server
&lt;/h2&gt;

&lt;p&gt;After more than a month of development, a Rust version of the RocketMQ name server component has finally been developed. This component is fully compatible with the RocketMQ Java version and provides the same functionality.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub Project Link: &lt;a href="https://github.com/mxsm/rocketmq-rust" rel="noopener noreferrer"&gt;&lt;strong&gt;Rocketmq-rust&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The advantages of using Rust to develop the RocketMQ name server are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greatly reduced startup time compared to the Java version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128230341090.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128230341090.png" alt="image-20240128230341090"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be seen that the entire RocketMQ name server startup is completed in less than one second.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cross-platform features (need to be compiled on different platforms)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory safety, due to the memory management characteristics of the Rust language&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you usually use RocketMQ and need to start the name server locally, you can consider using this Rust version, which is both convenient and fast. Download Link: &lt;a href="https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip" rel="noopener noreferrer"&gt;rocketmq-rust-all-bin-0.1.0.zip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. Quick Start with Rocketmq-rust Name Server
&lt;/h2&gt;

&lt;p&gt;There are two ways to quickly use the RocketMQ name server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the precompiled program&lt;/li&gt;
&lt;li&gt;Install using the cargo command&lt;/li&gt;
&lt;li&gt;Compile using the source code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2.1 Downloading Binary Files
&lt;/h3&gt;

&lt;p&gt;First, download the binary file &lt;a href="https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip" rel="noopener noreferrer"&gt;rocketmq-rust-all-bin-0.1.0.zip&lt;/a&gt; from the &lt;a href="https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip" rel="noopener noreferrer"&gt;GitHub release page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233113192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233113192.png" alt="image-20240128233113192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233133244.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233133244.png" alt="image-20240128233133244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downloading, unzip the file. You will see two folders as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231344495.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231344495.png" alt="image-20240128231344495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are two folders for &lt;strong&gt;Windows&lt;/strong&gt; and &lt;strong&gt;Linux&lt;/strong&gt; platforms.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mac version is not provided for now, but it will be provided in future versions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, let's take Windows as an example (Linux users can also try it on their own). In the &lt;strong&gt;windows&lt;/strong&gt; folder, there is an executable file named &lt;strong&gt;&lt;code&gt;rocketmq-namesrv-rust.exe&lt;/code&gt;&lt;/strong&gt;, which is the startup file for the RocketMQ name server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231641067.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231641067.png" alt="image-20240128231641067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Double-click to start. As shown in the figure below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231927444.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231927444.png" alt="image-20240128231927444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can view the usage by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;rocketmq-namesrv-rust.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Rust&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Usage:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rocketmq-namesrv-rust.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;OPTIONS&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Options:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9876&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;IP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FILE&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;Print&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;help&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-V&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Print&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  markdown
&lt;/h2&gt;

&lt;p&gt;title: "Rocketmq-rust Name Server Implementation"&lt;br&gt;
linkTitle: "Rocketmq-rust Name Server"&lt;br&gt;
sidebar_label: "Rocketmq-rust Name Server"&lt;br&gt;
weight: 202401282245&lt;/p&gt;
&lt;h2&gt;
  
  
  description: "Rust implementation of RocketMQ Name Server"
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;I am Ant carrying an elephant (Apache EventMesh PMC&amp;amp;Committer). If this article is helpful to you, give &lt;a href="https://github.com/mxsm/rocketmq-rust" rel="noopener noreferrer"&gt;Rocketmq-rust a star&lt;/a&gt;, follow me on &lt;a href="https://github.com/mxsm" rel="noopener noreferrer"&gt;GitHub: mxsm&lt;/a&gt;, and if there are any inaccuracies, please correct them by creating an &lt;a href="https://github.com/mxsm/rocketmq-rust/issues" rel="noopener noreferrer"&gt;ISSUE or submitting a PR&lt;/a&gt;~ Thank you! Email: &lt;a href="mailto:mxsm@apache.com"&gt;mxsm@apache.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  1. Overview of Rocketmq-rust Name Server
&lt;/h2&gt;

&lt;p&gt;After more than a month of development, a Rust version of the RocketMQ name server component has finally been developed. This component is fully compatible with the RocketMQ Java version and provides the same functionality.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub Project Link: &lt;a href="https://github.com/mxsm/rocketmq-rust" rel="noopener noreferrer"&gt;&lt;strong&gt;Rocketmq-rust&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The advantages of using Rust to develop the RocketMQ name server are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greatly reduced startup time compared to the Java version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128230341090.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128230341090.png" alt="image-20240128230341090"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be seen that the entire RocketMQ name server startup is completed in less than one second.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cross-platform features (need to be compiled on different platforms)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory safety, due to the memory management characteristics of the Rust language&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you usually use RocketMQ and need to start the name server locally, you can consider using this Rust version, which is both convenient and fast. Download Link: &lt;a href="https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip" rel="noopener noreferrer"&gt;rocketmq-rust-all-bin-0.1.0.zip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  2. Quick Start with Rocketmq-rust Name Server
&lt;/h2&gt;

&lt;p&gt;There are two ways to quickly use the RocketMQ name server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the precompiled program&lt;/li&gt;
&lt;li&gt;Install using the cargo command&lt;/li&gt;
&lt;li&gt;Compile using the source code&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2.1 Downloading Binary Files
&lt;/h3&gt;

&lt;p&gt;First, download the binary file &lt;a href="https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip" rel="noopener noreferrer"&gt;rocketmq-rust-all-bin-0.1.0.zip&lt;/a&gt; from the &lt;a href="https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip" rel="noopener noreferrer"&gt;GitHub release page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233113192.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233113192.png" alt="image-20240128233113192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233133244.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128233133244.png" alt="image-20240128233133244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downloading, unzip the file. You will see two folders as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231344495.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231344495.png" alt="image-20240128231344495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are two folders for &lt;strong&gt;Windows&lt;/strong&gt; and &lt;strong&gt;Linux&lt;/strong&gt; platforms.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mac version is not provided for now, but it will be provided in future versions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, let's take Windows as an example (Linux users can also try it on their own). In the &lt;strong&gt;windows&lt;/strong&gt; folder, there is an executable file named &lt;strong&gt;&lt;code&gt;rocketmq-namesrv-rust.exe&lt;/code&gt;&lt;/strong&gt;, which is the startup file for the RocketMQ name server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231641067.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231641067.png" alt="image-20240128231641067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Double-click to start. As shown in the figure below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231927444.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128231927444.png" alt="image-20240128231927444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can view the usage by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;rocketmq-namesrv-rust.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Rust&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Usage:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rocketmq-namesrv-rust.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;OPTIONS&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Options:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9876&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;IP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FILE&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;RocketMQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;Print&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;help&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-V&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Print&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, you can configure the IP address, port, and configuration file of the RocketMQ name server. Compared to the Java version, I have made some optimizations here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128232228666.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128232228666.png" alt="image-20240128232228666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Installation via Cargo Command
&lt;/h3&gt;

&lt;p&gt;Install using the rust cargo command. Here is an example using Linux (WSL). Use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;rocketmq-namesrv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait for it to be installed locally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128232834062.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128232834062.png" alt="image-20240128232834062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then run the command to verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rocketmq-namesrv-rust
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128232946771.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128232946771.png" alt="image-20240128232946771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be seen that it runs successfully.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Compilation from Source Code
&lt;/h3&gt;

&lt;p&gt;Compiling from source code is the same as installing via the cargo command. First, install rust, with a minimum version of &lt;strong&gt;1.75.0&lt;/strong&gt;. Then clone the source code of &lt;a href="https://github.com/mxsm/rocketmq-rust" rel="noopener noreferrer"&gt;rocketmq-rust&lt;/a&gt; from GitHub to your local machine, and enter the root directory of the code. Run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cargo run --bin rocketmq-namesrv-rust
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you can run the rocketmq name server.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Function Verification
&lt;/h2&gt;

&lt;p&gt;How to verify the functionality? First, clone the code of &lt;strong&gt;&lt;a href="https://github.com/apache/rocketmq-dashboard" rel="noopener noreferrer"&gt;rocketmq-dashboard&lt;/a&gt;&lt;/strong&gt; locally, or if you have the corresponding one locally, you can also use it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Verification is done using IDEA&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Start the Rust version of the nameserver&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128234422219.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128234422219.png" alt="image-20240128234422219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Start the rocketmq-dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128234956398.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128234956398.png" alt="image-20240128234956398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be seen from the logs printed by the name server that it has been connected (at this point, the Broker has not been started yet). Log in to the web and find that there is no data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128235058216.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128235058216.png" alt="image-20240128235058216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 Start Broker registration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128235235695.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128235235695.png" alt="image-20240128235235695"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The name server received the broker registration request. Next, let's take a look at the information on the web page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128235321539.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240128235321539.png" alt="image-20240128235321539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The data has been registered. From here, we can see that the basic functions have been implemented.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Summary
&lt;/h2&gt;

&lt;p&gt;The current &lt;a href="https://github.com/mxsm/rocketmq-rust" rel="noopener noreferrer"&gt;&lt;strong&gt;rocketmq-rust&lt;/strong&gt;&lt;/a&gt; project basically implements the function of a RocketMQ name server using Rust. There may be some bugs in the functionality, and further testing and fixes will be performed in subsequent versions. If you encounter any problems during use, you can raise an &lt;a href="https://github.com/mxsm/rocketmq-rust/issues" rel="noopener noreferrer"&gt;ISSUE&lt;/a&gt;. Meanwhile, if you are interested in &lt;strong&gt;Rust&lt;/strong&gt; and &lt;strong&gt;RocketMQ&lt;/strong&gt;, you are welcome to participate in the project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240129000040927.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmxsm%2Fpicture%2Fmain%2Frocketmq-rust%2Fnamesrvimage-20240129000040927.png" alt="image-20240129000040927"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>rocketmq</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
