Bob的RocketMQ学习笔记

RocketMQ学习笔记

I'm bob,chen。 成为大神,成为大神,成为大神!

目录

RocketMQ学习笔记

背景

RokectMQ官网及常用链接

为什么选择RocktMQ?

RocketMQ的安装

安装RocketMQ需要的软件

RockeMQ单机

RoketMQ集群

云服务器上安装RoketMQ

RoketMQ的采坑

1.Broker启动时失败

其他有用的链接


新公司使用的MQ中间件是RoketMQ,于是就要学习RokectMQ的相关知识。

RokectMQ官网及常用链接

RocketMQ官网:http://rocketmq.apache.org/

RocketMQ官网上总结的常见的问题解决方案:http://rocketmq.apache.org/docs/faq/

 

为什么选择RocktMQ?

 

RocketMQ的安装

对于RocketMQ的安装,每个开发者由于自身环境的不同所以有不同的选择,这里我是在Linux环境下安装的。

安装RocketMQ需要的软件

在RocketMQ的官网上,明确描述了安装RokectMQ所需的软件和安装步骤。具体如下:

准备好了这些软件,我们开始安装RocketMQ。这些环境的安装等我在出一篇博客。

RockeMQ单机

在官网(http://rocketmq.apache.org/)的左上角,quick start里面有详细的安装教程。其实我们只是在安装过程中,解决自己的遇到的一些问题就可以了。下面一起来看看,我的安装:

1.下载、解压、构建和进入指定启动目录

 下载链接(镜像地址):

https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.8.0/rocketmq-all-4.8.0-source-release.zip

备份地址:

https://downloads.apache.org/rocketmq/4.8.0/rocketmq-all-4.8.0-source-release.zip 
 

解压、构建和进入启动目录等顺序操作命令如下:

  > unzip rocketmq-all-4.8.0-source-release.zip
  > cd rocketmq-all-4.8.0/
  > mvn -Prelease-all -DskipTests clean install -U
  > cd distribution/target/rocketmq-4.8.0/rocketmq-4.8.0

 

2. 启动Name Server

 2.1 启动Name Server

nohup sh bin/mqnamesrv &

 2.2 查看name Server启动日志(检验Name Server是否启动成功)

tail -f ~/logs/rocketmqlogs/namesrv.log

当日志中有了:Name Server boot success。 表示已经启动成功。

2.3 我本地的启动操作实例截图

3.启动Broker

3.1 启动Broker

nohup sh bin/mqbroker -n localhost:9876 &

3.2 查新Broker启动日志

tail -f ~/logs/rocketmqlogs/broker.log

·  这个位置要特别注意了,我在这个位置采坑了。

   如果输入“tail -f ~/logs/rocketmqlogs/broker.log ”命令,在broker.log日志可以看到:The broker[DEFAULT_BROKER, xx.xx.xx.xx:xx] boot success. serializeType=JSON and name server is localhost:9876。表示Broker启动成功。

   如果看到:tail: 无法打开"/home/zookeeper/logs/rocketmqlogs/broker.log" 读取数据: 没有那个文件或目录。具体如下图所示时,说明broker没有启动成功。

  

  通过其他博客,最终定位了问题并提供了解决方案(详见后面RoketMQ的采坑--MQ Broker启动失败章节)。

 

4.安装成功后测试

确保Name Server启动成功,Broker启动成功后,可以官网提供的案例,测试mq是否正常可用。

4.1 发送消息

export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

  我本地测操作实例:

4.2 获取消息

export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

 

我本地的操作实例:

至此,RocketMQ的单机版安装就完成了

RoketMQ集群

待熟悉之后,补充进来。

云服务器上安装RoketMQ

待研究,补充进来。

 

RoketMQ的采坑

1.Broker启动时失败

    Broker启动失败太不明显了。在查看Broker启动日志时,会报这个错---》tail: 无法打开"/home/zookeeper/logs/rocketmqlogs/broker.log" 读取数据: 没有那个文件或目录

通过查阅博客,发现问题在于:RocketMQ Broker 默认的jvm参数堆空间需要的太大导致的。

打开当前目录下的nohup.out文件,发现问题:

解决方案:

编辑bin/runbroker.sh文件,如下:

将默认设置的内存注释掉,因为它给的太大了,都是以g为单位的,一般虚拟机的内存不会这么大;在下方将其修改为合适的大小,如我给的是256m、256m、128m。修改完成后保存,重新启动Broker(消息服务器),通过broker.log查看,如下:

修改之前的jvm配置

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

修改之后的配置为:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

重启mqbroker即可。

重启mqbroker。

相关博客:

https://blog.csdn.net/m0_43404934/article/details/110277084

 

其他有用的链接

https://downloads.apache.org/rocketmq/rocketmq-spring/2.2.0/rocketmq-spring-rocketmq-spring-all-2.2.0.zip

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 golang 学习笔记,希望对你有帮助: ### 1. 基本语法 - 包声明:每个 Go 程序都是由多个包组成,使用 `package` 声明包名。 - 引入包:使用 `import` 关键字引入需要的包。 - 函数:使用 `func` 关键字声明函数,函数可以有多个返回值。 - 变量:使用 `var` 关键字声明变量。 - 常量:使用 `const` 关键字声明常量。 - 控制语句:Go 语言支持条件语句和循环语句,例如 `if`、`switch`、`for` 等。 ### 2. 数据类型 Go 语言支持以下数据类型: - 布尔型:`bool` - 数字类型:`int`、`int8`、`int16`、`int32`、`int64`、`uint`、`uint8`、`uint16`、`uint32`、`uint64`、`uintptr`、`float32`、`float64`、`complex64`、`complex128` - 字符串类型:`string` - 派生类型:`array`、`slice`、`map`、`struct`、`interface`、`channel` ### 3. 函数 Go 语言中的函数可以有多个返回值,可以使用命名返回值来使函数更加清晰易读。例如: ```go func swap(x, y string) (string, string) { return y, x } ``` ### 4. 数组和切片 Go 语言中的数组和切片都是支持多维的。数组和切片的区别在于数组长度是固定的,而切片长度可以动态变化。例如: ```go // 声明数组 var a [5]int // 声明切片 var s []int s = append(s, 1, 2, 3) ``` ### 5. 结构体 结构体是一种自定义的数据类型,可以包含多个不同类型的字段。例如: ```go type person struct { name string age int } func main() { p := person{"Bob", 20} fmt.Println(p.name, p.age) } ``` ### 6. 接口 接口定义了一组方法的集合,只要某个类型实现了接口中定义的所有方法,就可以认为它实现了这个接口。例如: ```go type Shape interface { area() float64 } type Circle struct { x, y, r float64 } func (c Circle) area() float64 { return math.Pi * c.r * c.r } func main() { var s Shape s = Circle{x: 0, y: 0, r: 5} fmt.Println(s.area()) } ``` ### 7. 并发 Go 语言使用协程来实现并发,协程是一种轻量级的线程,可以在一个线程中同时执行多个协程。例如: ```go func main() { go say("world") say("hello") } func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } ``` 以上就是 golang 学习笔记的主要内容,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值