10 fotos | Este artigo leva você a executar o RocketMQ com o Mac M1

Este é o 166º artigo original de Wukong

Site avançado de arquitetura: www.passjava.cn

Olá, eu sou o Goku.

O conteúdo principal deste artigo é o seguinte:

foto

Índice

prefácio

Recentemente, quando estamos lançando RocketMQa fila de mensagens, devemos primeiro executar o RocketMQ, certo? Normalmente, executamos em máquinas Windows ou Linux e seguimos o tutorial oficial para executá-lo de uma vez. Além disso, Macs com chips Intel também podem executá-lo facilmente.

Mas quando eu  Mac M1 estava rodando na máquina na Internet, encontrei vários problemas.Depois de um dia jogando, finalmente consegui rodar o RocketMQ no Mac M1 Docker. Aqui está um resumo da minha jornada mental.

Embora o ambiente de demonstração use o sistema Mac M1, também é aplicável ao sistema Linux~

A maneira de executar o RocketMQ com o código-fonte também é apresentada abaixo.

1. Execute o RocketMQ com o código-fonte

No início, eu rodava com o Docker, e ele reportava um erro, depois eu rodava com o código-fonte, e conseguia rodar, enviar e consumir mensagens.

Endereço de origem: github.com/apache/rock…

A versão que estou usando é 4.9.2.

Para etapas detalhadas, consulte um artigo escrito por Wukong:

18 fotos | Este artigo leva você a construir um ambiente de depuração de código-fonte RocketMQ

2. Execute o RocketMQ com o Docker

Um total de três contêineres foram iniciados e as imagens usadas são

  • espelho do servidor de nomes: rocketmqinc/rocketmq
  • Imagem do corretor: dyrnq/rocketmq:4.8.0
  • Imagem do console: apacherocketmq/rocketmq-dashboard:latest

foto

Três contêineres iniciados com sucesso

2.1 Puxe a imagem do rocketmq

docker pull rocketmqinc/rocketmq

2.2 Inicie o comando nameserver

Imagem espelhada: rocketmqinc/rocketmq

docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv  rocketmqinc/rocketmq sh mqnamesrv

2.3 Iniciar o comando do corretor

Imagem espelhada: dyrnq/rocketmq:4.8.0

docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbrokerv2 --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" dyrnq/rocketmq:4.8.0 sh mqbroker -c ../conf/broker.conf

no recipiente

docker exec -it b6b /bin/bash

foto

Insira o contêiner do corretor

修改 broker.conf 文件,提示未安装 vim 工具,则需要安装下 vim

vim ../conf/broker.conf
apt-get update
apt-get install vim
vim ../conf/broker.conf

然后将 这行命令拷贝到 broker.conf 文件中。192.168.10.197 为自己的本机 IP

brokerIP1=192.168.10.197

不知道自己 IP 的地址的,可以通过这个命令获取 mac 机器的本机 IP,如下所示:

 ifconfig | grep "inet"

最后 broker.conf 配置如下:

foto

broker.conf 配置

三、启动控制台 rocketmq-dashboard

原来的控制台是 rocketmq-console-ng,但是发现 Github 上已经移除了。官方提示如下:

foto

官方提示移除了 rocketmq-console-ng

上面公告的表示之前的rocket-console已经不在这个仓库了,已经创建了一个独立的仓库并命名为RocketMQ Dashboard。仓库路径:github.com/apache/rock…

我们直接执行下面的命令:

docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.8.62:9876 -Drocketmq.config.isVIPChannel=false" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

foto

启动 dashboard 容器

注意:这里的 IP 地址为本机 IP

isVIPChannel=false,这里必须这样设置,不然打开控制台后,无法获取数据。

容器启动成功后访问 http://localhost:8080/

foto

四、测试发送消息

往 test_topic 发送一条消息

foto

选择往哪个队列发送消息

在消息主题中输入 悟空聊架构,www.passjava.cn,点击确定按钮发送消息。

foto

发送的消息内容

发送结果如下:

foto

发送结果

看下 Message 菜单栏,选择 test_top 主题,可以看到一条消息:

foto

消息列表

消息内容如下,和发送的消息一致。

foto

接收到的消息

五、问题汇总

broker 无法连到 NameServer

需要到容器里面修改 broker.conf 文件,加上

brokerIP1=192.168.10.197

并且 docker 启动 broker 时需要增加命令参数-c ../conf/broker.conf

原因

O endereço IP aqui precisa ser especificado como um endereço de rede externo. Porque o corretor rockerMQ escolherá o endereço da intranet por padrão.

-cOs parâmetros do arquivo de configuração são usados ​​apenas se houver parâmetros na linha de parâmetros . Há muito tempo preso aqui.

O código fonte é o seguinte:

if (commandLine.hasOption('c')) {
    String file = commandLine.getOptionValue('c');
    if (file != null) {
       configFile = file;
       InputStream in = new BufferedInputStream(new FileInputStream(file));
       properties = new Properties();
       properties.load(in);

       properties2SystemEnv(properties);
       MixAll.properties2Object(properties, brokerConfig);
       MixAll.properties2Object(properties, nettyServerConfig);
       MixAll.properties2Object(properties, nettyClientConfig);
       MixAll.properties2Object(properties, messageStoreConfig);

       BrokerPathConfigHelper.setBrokerConfigPath(file);
       in.close();
    }
}

Inicie o corretor e relate um erro

 wukong@wukongs-MacBook-Pro  ~  docker restart b6b
Error response from daemonCannot restart container b6bCannot link to a non running container/rmqnamesrv AS /rmqbrokerv2/namesrv

foto

Mensagem de erro

razão

Na verdade, esse problema é que o servidor de nomes não foi iniciado com êxito.

  • FIM -

Acho que você gosta

Origin juejin.im/post/7264044879209070629
Recomendado
Clasificación