Самый простой способ построить сервер RocketMQ в истории
Недавно учась использовать RocketMQ, вам нужно построить сервер RocketMQ, В этой статье в основном описывается процесс создания RocketMQ и некоторые ямы, на которые наступил этот процесс. Что касается того, насколько это просто, то требуется всего три шага, когда на машине уже есть среда Docker.
- Вытащите проект с гитхаба
- Исправлять
broker.conf
серединаbrokerIP1
параметр, измененный на локальный IP - Войти
docker-compose.yml
Путь, где находится файл, выполнитьdocker-compose up
команда
предисловие
Сначала мы используемDockerЧтобы создать среду, мы должны сначала установить Docker на нашу собственную машину, Конкретный процесс установки и официальная документация по внедрению Docker очень ясны.docs.docker.com/individual-started….
Мы собираемся построить сервер RocketMQ, тогда нам нужно знать, что нужно развернуть для создания сервера RocketMQ. Существует схема архитектуры для RocketMQ, как показано ниже. Показанные на рисунке Producer (производитель) и Consumer (потребитель) нам не нужны для сборки, потому что они запускаются как сервер. Сервер имен — это компонент, подобный реестру, мы можем просто понимать его как Eureka в springcloud, тогда сервер имен должен быть создан нами. Брокер — это место, где действительно обрабатывается сообщение, и его тоже нужно построить нам.
В нормальных условиях мы можем удовлетворить наши потребности в отправке и получении сообщений, создав два компонента, упомянутых выше. Но обычно нам также необходимо создать платформу веб-визуализации для просмотра состояния службы MQ, потребления сообщений, настройки очереди тем и так далее. использовать здесьrocketmq-console
. Он также устанавливается через Docker.
развертывать
Выше мы упомянули, что необходимо установить три компонента, затем эти три компонента должны иметь возможность взаимодействовать друг с другом.Учитывая, что отдельно развертывать и настраивать информацию о соединении громоздко, здесь мы используемdocker-compose
Разверните конфигурацию.
Сначала нам нужно создатьdocker-compose.yml
конфигурационный файл. Содержимое файла следующее
1version: '3.5'
2services:
3 rmqnamesrv:
4 image: foxiswho/rocketmq:server
5 container_name: rmqnamesrv
6 ports:
7 - 9876:9876
8 volumes:
9 - ./logs:/opt/logs
10 - ./store:/opt/store
11 networks:
12 rmq:
13 aliases:
14 - rmqnamesrv
15
16 rmqbroker:
17 image: foxiswho/rocketmq:broker
18 container_name: rmqbroker
19 ports:
20 - 10909:10909
21 - 10911:10911
22 volumes:
23 - ./logs:/opt/logs
24 - ./store:/opt/store
25 - ./conf/broker.conf:/etc/rocketmq/broker.conf
26 environment:
27 NAMESRV_ADDR: "rmqnamesrv:9876"
28 JAVA_OPTS: " -Duser.home=/opt"
29 JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
30 command: mqbroker -c /etc/rocketmq/broker.conf
31 depends_on:
32 - rmqnamesrv
33 networks:
34 rmq:
35 aliases:
36 - rmqbroker
37
38 rmqconsole:
39 image: styletang/rocketmq-console-ng
40 container_name: rmqconsole
41 ports:
42 - 8080:8080
43 environment:
44 JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
45 depends_on:
46 - rmqnamesrv
47 networks:
48 rmq:
49 aliases:
50 - rmqconsole
51
52networks:
53 rmq:
54 name: rmq
55 driver: bridge
затем сdocker-compose.yml
Создайте три соответствующие папки ниже того же уровняconf
,logs
,store
. затем вconf
Создал в папкеbroker.conf
Файл конфигурации, расположение всех файлов в каталоге показано ниже.
1docker-compose.yml
2conf
3 - broker.conf
4logs
5store
затем писатьbroker.conf
Содержимое конфигурационного файла
1# Licensed to the Apache Software Foundation (ASF) under one or more
2# contributor license agreements. See the NOTICE file distributed with
3# this work for additional information regarding copyright ownership.
4# The ASF licenses this file to You under the Apache License, Version 2.0
5# (the "License"); you may not use this file except in compliance with
6# the License. You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
17# 所属集群名字
18brokerClusterName=DefaultCluster
19
20# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
21# 在 broker-b.properties 使用: broker-b
22brokerName=broker-a
23
24# 0 表示 Master,> 0 表示 Slave
25brokerId=0
26
27# nameServer地址,分号分割
28# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
29
30# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
31# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
32brokerIP1=192.168.1.16
33
34# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
35defaultTopicQueueNums=4
36
37# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
38autoCreateTopicEnable=true
39
40# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
41autoCreateSubscriptionGroup=true
42
43# Broker 对外服务的监听端口
44listenPort=10911
45
46# 删除文件时间点,默认凌晨4点
47deleteWhen=04
48
49# 文件保留时间,默认48小时
50fileReservedTime=120
51
52# commitLog 每个文件的大小默认1G
53mapedFileSizeCommitLog=1073741824
54
55# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
56mapedFileSizeConsumeQueue=300000
57
58# destroyMapedFileIntervalForcibly=120000
59# redeleteHangedFileInterval=120000
60# 检测物理文件磁盘空间
61diskMaxUsedSpaceRatio=88
62# 存储路径
63# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
64# commitLog 存储路径
65# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
66# 消费队列存储
67# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
68# 消息索引存储路径
69# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
70# checkpoint 文件存储路径
71# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
72# abort 文件存储路径
73# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
74# 限制的消息大小
75maxMessageSize=65536
76
77# flushCommitLogLeastPages=4
78# flushConsumeQueueLeastPages=2
79# flushCommitLogThoroughInterval=10000
80# flushConsumeQueueThoroughInterval=60000
81
82# Broker 的角色
83# - ASYNC_MASTER 异步复制Master
84# - SYNC_MASTER 同步双写Master
85# - SLAVE
86brokerRole=ASYNC_MASTER
87
88# 刷盘方式
89# - ASYNC_FLUSH 异步刷盘
90# - SYNC_FLUSH 同步刷盘
91flushDiskType=ASYNC_FLUSH
92
93# 发消息线程池数量
94# sendMessageThreadPoolNums=128
95# 拉消息线程池数量
96# pullMessageThreadPoolNums=128
Нам нужно лишь немного изменить содержимое в конфигурационном файле, а именноbrokerIP1
Это свойство, мы меняем его на наш локальный ip, вы можете использоватьipconfig
смотреть.
После модификации мы сразуdocker-compose.yml
Введите команду, где находится файлdocker-compose up
начать. После успешного запуска введите в браузереhttp://localhost:8080/
Вы видите страницу управления, что означает, что мы успешно построили.
Начните быстро с Springboot
Здесь мы будем использовать springboot, чтобы быстро начать работу с mq, мы будем использоватьrocketmq-spring-boot-starter
модуль.
Конфигурация помпона следующая
1<!--在pom.xml中添加依赖-->
2<dependency>
3 <groupId>org.apache.rocketmq</groupId>
4 <artifactId>rocketmq-spring-boot-starter</artifactId>
5 <version>2.0.3</version>
6</dependency>
Конфигурация градиента выглядит следующим образом
1implementation 'org.apache.rocketmq:rocketmq-spring-boot-starter:2.0.3'
Конфигурация отправителя потребительской услуги выглядит следующим образом:
1## application.properties
2rocketmq.name-server=ip:9876
3rocketmq.producer.group=my-group
Программа отправителя потребительского обслуживания выглядит следующим образом:
1@SpringBootApplication
2public class ProducerApplication implements CommandLineRunner {
3 @Resource
4 private RocketMQTemplate rocketMQTemplate;
5
6 public static void main(String[] args){
7 SpringApplication.run(ProducerApplication.class, args);
8 }
9
10 public void run(String... args) throws Exception {
11 rocketMQTemplate.convertAndSend("test-topic-1", "Hello, World!");
12 rocketMQTemplate.send("test-topic-1", MessageBuilder.withPayload("Hello, World! I'm from spring message").build());
13 }
14
15}
Если вы избежите проблем здесь, вы можете написать потребителей и производителей в одном проекте.
Конфигурация потребителя сообщений выглядит следующим образом:
1## application.properties
2rocketmq.name-server=ip:9876
Потребитель сообщений запускает программу следующим образом:
1@SpringBootApplication
2public class ConsumerApplication{
3
4 public static void main(String[] args){
5 SpringApplication.run(ConsumerApplication.class, args);
6 }
7
8 @Slf4j
9 @Service
10 @RocketMQMessageListener(topic = "test-topic-1", consumerGroup = "my-consumer_test-topic-1")
11 public static class MyConsumer1 implements RocketMQListener<String> {
12 public void onMessage(String message) {
13 log.info("received message: {}", message);
14 }
15 }
16}
Пока что мы можем с удовольствием экспериментировать с различными вещами, связанными с RocketMQ, на этой машине.
Хранилище файлов конфигурации RocketMQ Docker
Хранилище файлов конфигурации RocketMQ Docker
Хранилище файлов конфигурации RocketMQ Docker
Вы можете получить проект непосредственно сверху, и для запуска RocketMQ потребуется всего два шага.
- Исправлять
broker.conf
серединаbrokerIP1
параметр, измененный на локальный IP - Войти
docker-compose.yml
Путь, где находится файл, выполнитьdocker-compose up
команда
Если вы не хотите самостоятельно создавать проект Springboot, вы можете начать сGitHub.com/Г-н Моду…Просто потяните его прямо сверху.