springboot下rocketmq同步消息;异步消息;延时消息

112 篇文章 4 订阅

第一步肯定是引入依赖了

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

如果依赖刷不下来记得换下mavenmirror源,这里给出我的本地源

<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>central</mirrorOf>
  <name>Nexus aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云spring仓库</name>
    <url>https://maven.aliyun.com/repository/spring</url>
</mirror>

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云阿帕奇仓库</name>
    <url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>

<mirror>
  <id>mirrorId</id>
  <mirrorOf>repositoryId</mirrorOf>
  <name>Human Readable Name for this Mirror.</name>
  <url>http://my.repository.com/repo/path</url>
</mirror>

<mirror>
    <id>repo1</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://repo1.maven.org/maven2/</url>
</mirror>

<mirror>
    <id>repo2</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>https://mirror.tuna.tsinghua.edu.cn/</url>
</mirror>

yml配置

rocketmq:
  name-server: localhost:9876
  producer:
    #这里必需指定group
    group: test-group

同步发送消息

生产者
在这里插入图片描述
消费者

package com.fchen.usercenter.rocketmq;

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
@RocketMQMessageListener(topic = "testTopic", consumerGroup = "test-group")
public class TestConsumer implements RocketMQListener<Map<String,Object>> {

	//这个泛型和实际发送消息的类型一样
    @Override
    public void onMessage(Map<String, Object> map) {
        System.out.println(map.toString());
    }
}

异步发送消息

package com.fchan.mq;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

@RequestMapping("mq")
@RestController
@Slf4j
public class MqSendController {

    @Resource
    private RocketMQTemplate rocketMQTemplate;

    @PostMapping("sendMsg")
    public void sendMsg(@RequestBody Map<String,Object> map){
        String topic = "efg";

        //同步发送
        //rocketMQTemplate.convertAndSend(topic, map);

        //异步发送
        rocketMQTemplate.asyncSend(topic, map, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                log.info("发送:{},成功", topic);
            }

            @Override
            public void onException(Throwable e) {
                log.info("发送:{},失败", topic);
            }
        });

    }


}

消费者还是一样的

package com.fchan.mq;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

@Component
@RocketMQMessageListener(consumerGroup = "abc", topic = "efg")
@Slf4j
public class MqListener implements RocketMQListener<String> {


    @Override
    public void onMessage(String s) {
        log.info("收到了mq消息:{}", s);
    }
}

发送延时消息

发送的时候指定延时消息,rocketmq的时间按照延时等级来的,并不能自定义。
消费者还是和上面相同

@PostMapping("sendDelayMsg")
public void sendDelayMsg(@RequestBody Map<String,Object> map){
    String topic = "qwe";

    //发送延时消息
    //发送超时时间:2000
    //延时等级 2 代表 延时5s
    //rocketMq只支持如下延时等级messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
    log.info("发送时间:{}", LocalDateTime.now());
    rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(map).build(), 20000, 2);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值