RabbitMQ Stream 教程

上手教程:

用 Java 编写两个程序;一个 producer 发送一条消息,以及一个 consumer 接收 消息并打印出来。我们将略过 Java 客户端 API,专注于这个非常简单的事情,只是为了获得 开始。它是 RabbitMQ Streams 的 "Hello World"。

使用 docker安装

如果您尚未安装 RabbitMQ,可以在 Docker 容器中运行它:

bash 复制代码
docker run -it --rm --name rabbitmq -p 5552:5552 -p 15672:15672 -p 5672:5672  \
    -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS='-rabbitmq_stream advertised_host localhost' \
    rabbitmq:3.13    

等待服务器启动,然后启用 Stream 和 Stream Management 插件:

bash 复制代码
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_stream rabbitmq_stream_management 

依赖

XML 复制代码
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>stream-client</artifactId>
    <version>0.16.0</version>
</dependency>

发送

创建一个 producer

创建者还将声明一个流,它将向其发布消息,然后发布一条消息

java 复制代码
import com.rabbitmq.stream.*;

import java.io.IOException;


public static void main(String[] args) {

    Environment environment = Environment.builder().build();

    String stream = "hello-java-stream";
    environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(5)).create();
    Producer producer = environment.producerBuilder().stream(stream).build();
    producer.send(producer.messageBuilder().addData("Hello, World!".getBytes()).build(), null);
    System.out.println(" [x] 'Hello, World!' message sent");
}

流声明操作是幂等的:仅当流尚不存在时,才会创建流。

流是一种仅附加的日志抽象,允许重复使用消息,直到消息过期。 最好始终定义保留策略。在上面的示例中, 流的大小限制为 5 GiB。

消息内容是一个字节数组。应用程序可以使用任何 适当的格式,例如 JSON、MessagePack 等。

当上面的代码完成运行时,producer 连接和 stream-system 连接将关闭。这就是我们的生产商。

每次运行生产者时,它都会向服务器发送一条消息,并且该消息将 附加到流中。

接收

java 复制代码
import com.rabbitmq.stream.ByteCapacity;
import com.rabbitmq.stream.Consumer;
import com.rabbitmq.stream.Environment;
import com.rabbitmq.stream.OffsetSpecification;

public static void main(String[] args) {
    Environment environment = Environment.builder().build();
    String stream = "hello-java-stream";
    environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(5)).create();
    Consumer consumer = environment.consumerBuilder()
            .stream(stream)
            .offset(OffsetSpecification.first())
            .messageHandler((unused, message) -> {
                System.out.println("Received message: " + new String(message.getBodyAsBinary()));
            }).build();
}

请注意,流名称必须与创建者使用的名称匹配。consumer 部分也声明了 stream。这是为了允许启动任一部分 首先,无论是生产者还是消费者。该类用于实例化流使用者,并提供用于配置它的 builder 对象。 最后,该方法接受已传送消息的处理程序。该参数定义使用者的起点。 在这种情况下,使用者从流中可用的第一条消息开始。

相关推荐
h7ml4 小时前
基于 RabbitMQ 构建异步化淘客订单处理流水线:解耦、削峰与失败重试
分布式·rabbitmq·ruby
小北方城市网1 天前
Spring Boot Actuator+Prometheus+Grafana 生产级监控体系搭建
java·spring boot·python·rabbitmq·java-rabbitmq·grafana·prometheus
不想写bug呀2 天前
RabbitMQ集群和仲裁队列
rabbitmq·集群·仲裁队列
信创天地2 天前
国产化数据库深度运维:性能调优与故障排查实战指南
运维·数据库·安全·elk·自动化·rabbitmq
jiayong232 天前
MQ基础概念面试题
java·kafka·rabbitmq·rocketmq
成为你的宁宁2 天前
【RabbitMQ 集群企业级实战:RabbitMQ 特性、存储、工作模式解析与普通集群搭建及仲裁队列搭建企业级配置】
分布式·rabbitmq
Anastasiozzzz2 天前
RabbitMQ介绍与基础架构
分布式·rabbitmq
洛阳纸贵2 天前
JAVA高级工程师--RabbitMQ消息可靠性、若依集成升级
java·rabbitmq·java-rabbitmq
jiayong232 天前
MQ性能优化面试题
java·性能优化·kafka·rabbitmq
小北方城市网3 天前
Spring Cloud Gateway 全链路监控与故障自愈实战
spring boot·python·rabbitmq·java-rabbitmq·数据库架构