RocketMQ系列之消息发送/消费初体验

RocketMQ是怎么发送消息的呢?

我们直接用SCA来集成RocketMQ,然后使用SpringCloudStream对RocketMQ发送和接收消息

1、创建一个springboot

当前工程表示消息生产者

2、添加pom

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-stream-binder-rocketmq</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

3、添加配置信息

server.port=8070
#指定RocketMQ的NameServer地址
spring.cloud.stream.rocketmq.binder.name-server=127.0.0.1:9876
#TopicTest接收指定名称为output的binding消息
spring.cloud.stream.bindings.output.destination=TopicTest
spring.cloud.stream.rocketmq.bindings.output.producer.group=producer-demo-group

4、编写接口

@RestController
public class HelloController {
    @Autowired
    private Source source;

    @GetMapping("/send")
    public String send(String msg) {
        //封装消息
        MessageBuilder builder = MessageBuilder.withPayload(msg);
        Message message = builder.build();
        //通过通道发送消息
        source.output().send(message);
        return "rocketmq send:" + msg;
    }
}

5、启动类添加@EnableBinding注解

@SpringBootApplication
@EnableBinding({Source.class})
public class RocketProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(RocketProducerApplication.class, args);
    }
}

@EnableBinding({Source.class})表示绑定配置文件中名称为output的消息通道Binding,Source类的作用是它定义的消息通道名称为output,通过接口将入参msg发送给MQ中

6、启动服务

访问:http://localhost:8070/send?msg=123

会返回:rocketmq send:123

但是这样不足以说明消息是否已经发送到MQ中,我们可以看一下控制台Message菜单数据

查看详情,会查到消息文本,同时Topic也自动创建了

这样就说明消息发送成功了 


 RocketMQ是怎么消费消息的呢?

1、创建一个单体springboot

不过这次创建的是属于消费者

2、添加pom信息

可以直接把生产者的pom拿过来

3、添加配置文件

server.port=8060
spring.cloud.stream.rocketmq.binder.name-server=127.0.0.1:9876
#指定订阅的Topic
spring.cloud.stream.bindings.input.destination=TopicTest
spring.cloud.stream.bindings.input.group=consumer-group

4、定义消息监听

我是直接在启动类中直接实现的

@SpringBootApplication
@EnableBinding({Sink.class})
public class RocketConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(RocketConsumerApplication.class, args);
    }

    @StreamListener(value = Sink.INPUT)
    public void read(String msg) {
        System.out.println("TopicTest readMsg is:" + msg);
    }
}

@EnableBinding({Sink.class})标识绑定配置文件中名称为input的消息通道Binding,Sink类定义的消息通道的名称为input,@StreamListener是一个消息监听器,是为了监听MQ消息的

5、启动服务,观察控制台日志

启动完成之后,会直接打印上个生产者的消息,如下:

 这里我在生产者那里发送了两次,所以这里一次性全部消费了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值