我用Rust开发Rocketmq name server

我是蚂蚁背大象(Apache EventMesh PMC&Committer),文章对你有帮助给Rocketmq-rust star,关注我GitHub:mxsm,文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsm@apache.com

1. Rocketmq-rust namesrv概述

经过一个多月的开发,终于开发出来了一个Rust版本的Rocketmq name server组件。这个组件和Rocketmq Java版本完全兼容。提供相同的功能。

Github项目地址:Rocketmq-rust

使用Rust开发出来的Rocketmq name server的好处:

  • 启动时间相比Java版本大大减少

image.png

可以看到启动不到一秒钟就完成整个Rocketmq name server的启动。
  • 有着跨平台的特性(这里需要在不同的平台进行编译)

  • 内存安全,由于Rust语言的特性没有内存的回收机制。

如果平时有使用Rocketmq,并且本地需要启动Name server可以考虑使用这个Rust版本,既方便有快速。下载地址:https://github.com/mxsm/rocketmq-rust/releases/download/v0.1.0/rocketmq-rust-all-bin-0.1.0.zip

2.快速开始Rocketmq-rust name server

快速的使用Rocketmq的name server有两种方式:

  • 直接下载编译好的程序
  • 使用cargo命令进行安装
  • 使用源码进行编译

2.1 下载二进制文件

首先从Github的版本页面下载二进制文件rocketmq-rust-all-bin-0.1.0.zip。

image.png

image.png

文件下载后进行解压解压后可以看到如下两个文件夹如下图:

image.png

windowsLinux 两个平台的文件。

Mac的这个版本暂时没有提供,后续的版本会提供。

下面就以Windows为例(Linux的大家也可以自己去尝试现在的windows10,可以安装一个WSL)。在windows 的文件里面有 rocketmq-namesrv-rust.exe 的执行文件这个就是Rocketmq name server的启动文件。

image.png

双击即可启动。如下图所示:

image.png

通过如下命令查看使用:

rocketmq-namesrv-rust.exe --helpRocketMQ Name server(Rust)Usage: rocketmq-namesrv-rust.exe [OPTIONS]Options:-p, --port <PORT>    rocketmq name server port [default: 9876]-i, --ip <IP>        rocketmq name server ip [default: 127.0.0.1]-c, --config <FILE>  rocketmq name server config file-h, --help           Print help-V, --version        Print version

这里可以配置rocketmq name server的ip地址和端口以及配置文件。相对于Java版本这里我做了一些优化

image.png

2.2 通过命令安装

通过rust的cargo命令进行安装,我这里用linux作为例子(WSL)。使用一下命令

 cargo install rocketmq-namesrv

等待安装到本地。

image.png

然后运行验证一下,运行命令

rocketmq-namesrv-rust

image.png

通过查看发现运行成功。

2.3 使用源码进行编译

使用源码编译和通过cargo命令进行安装是一样的首先需要rust进行安装,版本最小为1.75.0。然后从Github rocketmq-rust 将源代码clone到本地,然后进入代码的根目录。运行如下命令:

cargo run --bin rocketmq-namesrv-rust

就能运行rocketmq name server了。

3. 功能验证

功能如何验证,首先我们将**rocketmq-dashboard** 的代码clone到本地或者如果本地有对应的也可以。

验证都用IDEA来进行

1. 启动rust版本的nameserver

image.png

2. 启动rocketmq-dashboard

image.png

通过上面的nameserver打印的日志可以看出来已经连上了(到这里Broker还没有启动), 登录web进入发现也没呀任何数据,如下图:

image.png

3 启动Broker注册

image.png

name server收到broker的注册请求。下面我们看一下web页面的信息。

image.png

数据已经注册上去了。到这里可以发现基本功能都已经实现了。

4. 总结

当前 rocketmq-rust 这个项目基本用rust实现了一个Rocketmq name server的功能,这个组件仔功能方面可能会有些bug存在,后续也会进行进一步的测试和修复。使用过程中发现问题可以提ISSUE 与此同时如果对 rustrocketmq 感兴趣欢迎大家一起参与到项目中来。

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439669.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<网络安全>《9 入侵防御系统IPS》

1 概念 IPS&#xff08; Intrusion Prevention System&#xff09;是电脑网络安全设施&#xff0c;是对防病毒软件&#xff08;Antivirus Programs&#xff09;和防火墙&#xff08;Packet Filter, Application Gateway&#xff09;的补充。 入侵预防系统&#xff08;Intrusio…

docker镜像详解

文章目录 一、什么是docker镜像 二、为什么需要镜像 三、镜像相关命令详解 3、1 命令清单 3、2 命令详解 四、镜像实战 4、1 镜像操作案例 4、2 离线迁移镜像 4、3 镜像存储的压缩与共享 &#x1f64b;‍♂️ 作者&#xff1a;Ggggggtm &#x1f64b;‍♂️ &#x1f440; 专栏…

如何改变音频的频率教程

这是一篇教你如何通过一些工具改变音频频率的教学文章。全程所用的软件都是免费的。 本文用到的软件&#xff1a; AIX智能下载器 用于抓取任何视频网站资源的插件 格式工厂 将mp4转化为mp3 Audacity 改变音频频率的软件 如果你已备好mp3或其他格式的音频&#xff0c;那么直接看…

时间戳的转换和应用

一、效果图 时间之外 时间之内 二、js代码 tim() //获取当前时间 function tim(){let end sessionStorage.getItem(jieshu); // 获取结束日期并转换为日期对象&#xff0c;时分秒日期let start sessionStorage.getItem(kaishi); // 获取开始日期并转换为日期对象&#xff…

最新GPT4.0使用教程,AI绘画-Midjourney绘画,GPT语音对话使用,DALL-E3文生图+思维导图一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

多伦多大学这门课85%挂了,均分29,因为学生用ChatGPT做作业!

加拿大多伦多大学作为世界知名学府&#xff0c;其学术水平和教育质量一直备受赞誉。然而&#xff0c;这也意味着它的考试难度相对较高&#xff0c;要求学生具备扎实的知识基础和优秀的学术能力。 就在在刚刚落幕的这个学期&#xff0c;多伦多大学的一门课程成为了热议的焦点。…

Python 二维码开源库之segno使用详解

概要 Python Segno 是一个用于生成二维码的开源库&#xff0c;它提供了丰富的功能和灵活的选项&#xff0c;可以帮助开发者轻松地生成各种类型的二维码。本文将介绍如何使用 Python Segno 创建二维码&#xff0c;并深入探讨其功能和用法。 什么是 Python Segno&#xff1f; P…

如何过有「松弛感」的生活?

最近网上有一个词很流行&#xff0c;叫做「松弛感」。最早的出处似乎是这么一条微博&#xff1a;博主见到一家人出门旅游&#xff0c;行李全部被退回&#xff0c;空手抵达目的地&#xff0c;竟然没人紧张和生气&#xff0c;而是重新安排好行李后继续开心聊天&#xff0c;全程非…

【linux】复制cp和硬连接、软连接的区别? innode 关系?

1.命令&#xff1a; cp -r [源文件或目录] [目的目录] #复制 ln -s [被链接的文件] [链接的目录/名称] #软连接 ln [被链接的文件] [链接的目录/名称] #硬连接 注&#xff1a;cp -r 会把所有source当作普通文件&#xff08;regular文件&#xff09;&#x…

Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库

Flutter应用服务 主题、暗黑、国际化、本地化-app_service库 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/det…

微服务-微服务Alibaba-Nacos 源码分析(上)

Nacos&Ribbon&Feign核心微服务架构图 架构原理 1、微服务系统在启动时将自己注册到服务注册中心&#xff0c;同时外发布 Http 接口供其它系统调用(一般都是基于Spring MVC) 2、服务消费者基于 Feign 调用服务提供者对外发布的接口&#xff0c;先对调用的本地接口加上…

Java 面试题之 IO(二)

字符流 文章目录 字符流Reader&#xff08;字符输入流&#xff09;Writer&#xff08;字符输出流&#xff09; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 不管是文件读写还是网络发送接收&#xff0c;信息的最小存储单元都是字节。 那为什么 I/O 流操作要分为字…