RocketMQ结合springboot使用

概要

提示:这里可以添加技术概要

RocketMQ 5.3.0
https://dlcdn.apache.org/rocketmq/5.3.0/ 可以去下载

本地启动

修改runserver.sh 占用内存

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改runbroker.sh

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

conf/broker.conf

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=127.0.0.1:9876
brokerIP1=127.0.0.1

启动 NameServer:

nohup sh mqnamesrv &
查看进程
ps aux | grep mqnamesrv

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

2025-04-15 16:58:33 INFO main - The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876

启动 Broker

nohup sh mqbroker -n 127.0.0.1:9876 &
tail -f ~/logs/rocketmqlogs/broker.log

看到启动正常的日志

2025-04-15 17:01:33 INFO main - The broker[U-4NFQQ751-2056.local, 30.177.33.6:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876```

关闭服务

```bash
sh mqshutdown namesrv
sh mqshutdown broker

java代码

提示:这里可以添加技术名词解释
pom引用,用的是spring-boot-starter-parent 2.3.2.RELEASE

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-rocketmq</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

消息发送端

import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;

public interface MessageProducer {
    String OUTPUT_TOPIC1 = "output-topic1";
    String OUTPUT_TOPIC2 = "output-topic2";

    @Output(OUTPUT_TOPIC1)
    MessageChannel outputTopic1();

    @Output(OUTPUT_TOPIC2)
    MessageChannel outputTopic2();
}
@Service
@EnableBinding(MessageProducer.class)
public class MessageProducerService {

    @Autowired
    private MessageProducer messageProducer;

    public void sendMessageToTopic1(String message, String tag, String region) {
        messageProducer.outputTopic1().send(MessageBuilder.withPayload(message)
                .setHeader("rocketmq_TAGS", tag)
                .setHeader("region", region)
                .build());
    }

    public void sendMessageToTopic2(String message, String tag, String region) {
        messageProducer.outputTopic2().send(MessageBuilder.withPayload(message)
                .setHeader("rocketmq_TAGS", tag)
                .setHeader("region", region)
                .build());
    }
}

MessageController

@RestController
public class MessageController {

    @Autowired
    private MessageProducerService messageProducerService;

    @GetMapping("/send/topic1")
    public String sendMessageToTopic1(@RequestParam String message, @RequestParam String tag, @RequestParam String region) {
        messageProducerService.sendMessageToTopic1(message, tag, region);
        return "Message sent to Topic1: " + message + " with tag " + tag + " and region " + region;
    }

    @GetMapping("/send/topic2")
    public String sendMessageToTopic2(@RequestParam String message, @RequestParam String tag, @RequestParam String region) {
        messageProducerService.sendMessageToTopic2(message, tag, region);
        return "Message sent to Topic2: " + message + " with tag " + tag + " and region " + region;
    }
}

消费端

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel;

public interface CustomBindings {
    String INPUT_TOPIC1 = "input-topic1";
    String INPUT_TOPIC2 = "input-topic2";

    @Input(INPUT_TOPIC1)
    SubscribableChannel inputTopic1();

    @Input(INPUT_TOPIC2)
    SubscribableChannel inputTopic2();
}
@Service
public class MessageConsumer {

    @StreamListener(value="input-topic1",condition = "headers['rocketmq_TAGS'] == 'TagA'")
    public void receiveMessageFromTopic1(Message<String> message) {
        System.out.println("Received message from Topic1: " + message.getPayload());
    }

    @StreamListener(value="input-topic2",condition = "headers['rocketmq_TAGS'] == 'TagB'")
    public void receiveMessageFromTopic2(Message<String> message) {
        System.out.println("Received message from Topic2: " + message.getPayload());
    }
}

验证,在url里面输入后,看消费端有没有日志打印。切换不同tag观察。

http://localhost:8081/send/topic1?message=test113&tag=TagA&region=Hangzhou

技术细节

提示:这里可以添加技术细节
注意tag过滤

小结

提示:这里可以添加总结

每个topic也可以单独一个service实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值