首页 > 其他分享 >RabbitMQ配置和实战

RabbitMQ配置和实战

时间:2023-07-31 18:36:51浏览次数:25  
标签:实战 short 配置 RabbitMQ add link private eventMessage public

RabbitMQ安装
docker run -d  --name xd_rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:3.8.15-management


#网络安全组记得开放端口
4369 erlang 发现口
5672 client 端通信口
15672 管理界面 ui 端口
25672 server 间内部通信口

访问管理界面
ip:15672
依赖引入
<!--引入AMQP-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.xml
spring:
  ##----------rabbit配置--------------
  rabbitmq:
    host: 192.168.75.146
    port: 5672
    virtual-host: dev
    username: admin
    password: password
    listener:
      simple:
        #消息确认方式,manual(手动ack) 和auto(自动ack) 。消息队列重试到达次数进入异常交换机--为实现,该策略要为auto
        acknowledge-mode: auto
        retry:
          #开启重试,消费者代码不能添加try catch捕获不往外抛异常
          enabled: true
          #最大重试次数
          max-attempts: 4
          # 重试消息的时间间隔,5秒
          max-interval: 5000
RabbitMQ配置文件 (一个交换机,两个队列,routingKey匹配规则适用于两队列)
@Configuration
@Data
public class RabbitMQConfig {


    /**
     * 交换机
     */
    private String shortLinkEventExchange="short_link.event.exchange";

    /**
     * 创建交换机 Topic类型
     * 一般一个微服务一个交换机
     * @return
     */
    @Bean
    public Exchange shortLinkEventExchange(){

        return new TopicExchange(shortLinkEventExchange,true,false);
        //return new FanoutExchange(shortLinkEventExchange,true,false);
    }

    //新增短链相关配置====================================

    /**
     * 新增短链 队列
     */
    private String shortLinkAddLinkQueue="short_link.add.link.queue";

    /**
     * 新增短链映射 队列
     */
    private String shortLinkAddMappingQueue="short_link.add.mapping.queue";

    /**
     * 新增短链具体的routingKey,【发送消息使用】
     */
    private String shortLinkAddRoutingKey="short_link.add.link.mapping.routing.key";

    /**
     * topic类型的binding key,用于绑定队列和交换机,是用于 link 消费者
     */
    private String shortLinkAddLinkBindingKey="short_link.add.link.*.routing.key";

    /**
     * topic类型的binding key,用于绑定队列和交换机,是用于 mapping 消费者
     */
    private String shortLinkAddMappingBindingKey="short_link.add.*.mapping.routing.key";


    /**
     * 新增短链api队列和交换机的绑定关系建立
     */
    @Bean
    public Binding shortLinkAddApiBinding(){
        return new Binding(shortLinkAddLinkQueue,Binding.DestinationType.QUEUE, shortLinkEventExchange,shortLinkAddLinkBindingKey,null);
    }


    /**
     * 新增短链mapping队列和交换机的绑定关系建立
     */
    @Bean
    public Binding shortLinkAddMappingBinding(){
        return new Binding(shortLinkAddMappingQueue,Binding.DestinationType.QUEUE, shortLinkEventExchange,shortLinkAddMappingBindingKey,null);
    }


    /**
     * 新增短链Link普通队列,用于被监听
     */
    @Bean
    public Queue shortLinkAddLinkQueue(){

        return new Queue(shortLinkAddLinkQueue,true,false,false);

    }

    /**
     * 新增短链mapping 普通队列,用于被监听
     */
    @Bean
    public Queue shortLinkAddMappingQueue(){

        return new Queue(shortLinkAddMappingQueue,true,false,false);

    }
对应的两个消费者
@Component
@Slf4j
//@RabbitListener(queues = "short_link.add.link.queue")
@RabbitListener(queuesToDeclare = { @Queue("short_link.add.link.queue") })
public class ShortLinkAddLinkMQListener {

    @Autowired
    private ShortLinkService shortLinkService;

    @RabbitHandler
    public void shortLinkHandler(EventMessage eventMessage, Message message, Channel channel) throws IOException {
        log.info("ShortLinkAddLinkMQListener message:{}",message);
        try{
            eventMessage.setEventMessageType(EventMessageType.SHORT_LINK_ADD_LINK.name());
            shortLinkService.handlerAddShortLink(eventMessage);

        }catch (Exception e){
            // 处理业务异常,等其他操作
            log.error("消费失败:{}",eventMessage);
            throw new BizException(BizCodeEnum.MQ_CONSUME_EXCEPTION);
        }
        log.info("消费成功:{}",eventMessage);
        //确认消息消费成功
//        channel.basicAck(tag,false);

    }
}
@Component
@Slf4j
//@RabbitListener(queues = "short_link.add.mapping.queue")
@RabbitListener(queuesToDeclare = { @Queue("short_link.add.mapping.queue") })
public class ShortLinkAddMappingMQListener {
    @Autowired
    private ShortLinkService shortLinkService;

    @RabbitHandler
    public void shortLinkHandler(EventMessage eventMessage, Message message, Channel channel) throws IOException {
        log.info("ShortLinkAddMappingMQListener message:{}",message);
        try{
            eventMessage.setEventMessageType(EventMessageType.SHORT_LINK_ADD_MAPPING.name());
            shortLinkService.handlerAddShortLink(eventMessage);

        }catch (Exception e){
            // 处理业务异常,等其他操作
            log.error("消费失败:{}",eventMessage);
            throw new BizException(BizCodeEnum.MQ_CONSUME_EXCEPTION);
        }
        log.info("消费成功:{}",eventMessage);
        //确认消息消费成功
//        channel.basicAck(tag,false);

    }
}
实战,这里直接在controller层中编码。(应该在Service实现)
@RestController
@RequestMapping("/api/link/v1")
public class ShortLinkController {

    @Autowired
    private ShortLinkService shortLinkService;
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    /**
     * 新增短链
     * @param shortLinkAddRequest
     * @return
     */
    @PostMapping("add")
    public JsonData createShortLink(@RequestBody ShortLinkAddRequest shortLinkAddRequest){
        //参数:交换机、匹配规则Key、信息对象
        EventMessage eventMessage = EventMessage.builder().[设置对象各字段信息]
            .build();

        //生成MQ。
        rabbitTemplate.convertAndSend(rabbitMQConfig.getShortLinkEventExchange(), rabbitMQConfig.getShortLinkAddRoutingKey(), eventMessage);
        
        return jsonData;
    }
    
}

标签:实战,short,配置,RabbitMQ,add,link,private,eventMessage,public
From: https://www.cnblogs.com/xietingwei/p/17594180.html

相关文章

  • 开发环境搭配_后端环境搭建_前后端联调_Nginx反向代理和负载均衡配置
       ......
  • 关于自定义程序打包成jar包,并读取配置
    前言在实际开发过程中,我们有时候有把你编写的一段程序打成jar包的需求,而一些配置是需要去配置文件里面读取关于这项目的一些配置,本人在网络上查询了众多的资料,总的来说可以归为3类1.从数据库读取配置 老生常谈,在dao层从数据库获取配置信息,然后返回到Service层进行业务逻辑......
  • ruby web 实战(9)-vue 3基础(2)
    目录定位到导入的vue定位到导入的vue使用导入映射表(ImportMaps)来告诉浏览器如何定位到导入的vue:<!doctypehtml><htmllang="zh"><head><metacharset="utf-8"><title>world</title></head><body><scriptt......
  • windows配置本地ssl证书
    打开php.ini文件,搜索curl.cainfo,替换为一下文件,cacert.pem是证书 curl.cainfo=D:\web\phpEnv\cacert.pem  ......
  • 活动回顾|阿里云 Serverless 技术实战与创新成都站回放&PPT下载
    7月29日“阿里云Serverless技术实战与创新”成都站圆满落幕。活动受众以关注Serverless技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对Serverless技术的理解,快速上手Serverless,拥抱云计算新范式带来的技术......
  • ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法
    ETHERNET/IP和ETHERCAT是两种不同的协议,它们在工业生产中都有广泛的应用。然而,由于协议不同,这两种设备之间无法通讯,这给工业生产带来了很大的麻烦。而捷米JM-EIP-ECAT网关应运而生,它能够连接到ETHERNET/IP总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提......
  • 【Logstash】conf文件mysql多数据源导入elasticsearch配置说明
    #inputplugin输入插件,接收事件源input{jdbc{#定义类型_1type=>"type_1"#mysql的ip、端口以及用到的数据库名jdbc_connection_string=>"jdbc:mysql://localhost:3306/数据库名"#mysql用户名jd......
  • 活动回顾|阿里云 Serverless 技术实战与创新成都站回放&PPT下载
    7月29日“阿里云Serverless技术实战与创新”成都站圆满落幕。活动受众以关注Serverless技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对Serverless技术的理解,快速上手Serverless,拥抱云计算新范式带来的技术红......
  • zabbix6.4 邮件告警配置
    1、注意事项QQ邮箱不支持zabbix6以上邮件配置,报拒绝登录建议使用163.com网易邮箱地址2、添加媒介创建媒介类型->  3、添加用户一般情况下,无需创建用户,编辑admin即可报警媒介添加  4、添加动作添加触发器动作->创建动作->添加操作 4.1 、操作一......
  • 简单配置Sql专家云
    一、实例配置1.添加实例   点击全面诊断实例配置,右上角点击添加。2.填写实例信息  根据下图填写对应的信息,连接测试成功后点击保存。3.添加完成  4.修改实例   找到对应的实例,点击下图蓝色框修改即可。 5.停止实例  找到对应的实例,点击下图红色框......