Spring BootとRocketMQの統合例

サービスの設定

RocketMQの基本設定を参照してください。

サンプルコード

Maven依存関係の追加

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

完全な依存関係は以下の通りです:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>rocketMqDemoApp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>RocketMqDemoApp</name>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.propertiesファイルの修正

rocketmq.name-server=127.0.0.1:9876
rocketmq.producer.group=my-group

rocketmq.consumer.topic=test-topic

すべての設定はRocketMQPropertiesのソースコードを参照してください。

プロデューサーの定義

@Component
public class MessageProducer {

    @Resource
    private RocketMQTemplate template;

    public void sendSync(String msg) {
        template.convertAndSend("topic-one", msg);
    }

    public void sendSpringMsg(String msg) {
        template.send("topic-one", MessageBuilder.withPayload(msg).build());
    }

    public void sendAsync(String msg) {
        template.asyncSend("topic-one", new PayloadBean(msg), new SendCallback() {
            @Override
            public void onSuccess(SendResult result) {
                System.out.printf("Async Success: %s%n", result);
            }

            @Override
            public void onException(Throwable e) {
                System.out.printf("Async Error: %s%n", e);
            }
        });
    }

    public void sendOrderly(String msg) {
        template.syncSendOrderly("topic-one", MessageBuilder.withPayload(msg).build(), "key");
    }
}

コンシューマーの定義

@RocketMQMessageListener(topic = "topic-one", consumerGroup = "my-group")
@Component
public class MessageConsumer implements RocketMQListener<String> {
    public void onMessage(String message) {
        System.out.println("Received: " + JSON.toJSONString(message));
    }
}

コントローラーによる呼び出し

@RestController
public class MessageController {
    @Autowired
    MessageProducer producer;

    @GetMapping("/sendSync")
    @ResponseBody
    public String sendMessage() {
        producer.sendSync("Hello World");
        return "OK";
    }
}

タグ: Spring Boot RocketMQ Maven Java

7月17日 02:51 投稿