栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Springboot集成RabbitMq及使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot集成RabbitMq及使用

文章目录
  • 前言
  • 一、简单介绍MQ
  • 二、安装
    • 1.安装Docker(安装步骤省略,网上很多)
    • 2.Docker安装Rabbitmq
    • 3.查看是否启动成功http://ip:15672
  • 三、Springboot代码配置
    • 1.yml配置
    • 2.pom.xml依赖配置
    • 3.消息队列枚举
    • 4.消息队列相关配置
  • 四、生产者代码示例
  • 五、消费者代码示例
  • 总结
  • 有感


前言

提示:本文介绍Springboot集成RabbitMq,以及简单的使用

欢迎关注个人公众号领取学习资料


提示:以下是本篇文章正文内容,下面案例可供参考

一、简单介绍MQ

消息中间件作用:异步操作、系统解耦、流量削峰等,具体使用可根据实际业务场景
常用MQ:Rabbitmq、RocketMQ、Kafka(本文将介绍兔子的使用)

二、安装 1.安装Docker(安装步骤省略,网上很多) 2.Docker安装Rabbitmq

命令如下(示例):

//拉取镜像
docker pull rabbitmq:3.8.0-management

//运行镜像   5672:服务端口   15672:web界面控制端口
docker run -d -p 5672:5672 -p 15672:15672 --name rabbmitq ID
 
// 进入容器
docker exec -it MQ容器ID bash

//创建用户、设置密码、赋予权限()
rabbitmqctl list_users  # 查看全部用户
rabbitmqctl add_user ceshi aaa123   #创建用户、设置密码
rabbitmqctl set_permissions -p / ceshi ".*" ".*" ".*"   #权限
rabbitmqctl set_user_tags ceshi administrator   #管理员

//退出容器
exit
3.查看是否启动成功http://ip:15672 三、Springboot代码配置 1.yml配置
  rabbitmq:
    host: 服务器ip
    port: 5672
    username: ceshi
    password: aaa123
    #虚拟host 可以不设置,使用server默认host
    virtual-host:
2.pom.xml依赖配置
        
            org.springframework.boot
            spring-boot-starter-amqp
        
3.消息队列枚举
import lombok.Getter;

@Getter
public enum QueueEnum {

    
    QUEUE_DEMO("direct-demo", "queue-demo", "key-demo");
    
    
    private String exchange;

    
    private String name;

    
    private String routeKey;

    QueueEnum(String exchange, String name, String routeKey) {
        this.exchange = exchange;
        this.name = name;
        this.routeKey = routeKey;
    }
}
4.消息队列相关配置
import com.jack.modules.wms.common.enums.QueueEnum;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class RabbitMqConfig {

    
    @Bean
    public Queue demoQueue() {
        return new Queue(QueueEnum.QUEUE_DEMO.getName(), true);
    }

    
    @Bean
    DirectExchange demoExchange() {
        return new DirectExchange(QueueEnum.QUEUE_DEMO.getExchange());
    }

    
    @Bean
    Binding demoBinding() {
        return BindingBuilder.bind(demoQueue()).to(demoExchange()).with(QueueEnum.QUEUE_DEMO.getRouteKey());
    }
    
}

四、生产者代码示例
@Autowired
RabbitTemplate rabbitTemplate;

//在对应的业务中调用
rabbitTemplate.convertAndSend(QueueEnum.QUEUE_DEMO.getExchange(), QueueEnum.QUEUE_DEMO.getRouteKey(), "生产者数据DEMO");

五、消费者代码示例
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;

import java.io.IOException;


@Component
@RabbitListener(queues = "queue-demo")
public class DemoReceiver {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @RabbitHandler
    public void process(String msg, @Header(AmqpHeaders.DELIVERY_TAG) long tag, Channel channel) throws IOException {
        logger.info("从MQ队列拿到的消息" + msg);
        // 确认消息, false表示不会重新放回队列
        channel.basicAck(tag, false);
    }
}

控制台可查看到从队列拿到的消息,也可以在web管理界面查看消息的消息情况


总结

1、队列的使用可以在一些场景下提升系统的吞吐量,优化用户体验,提升系统的瓶颈等等
2、随之也会带来:系统依赖性、系统问题排查的困难性,如何保证消息的不重复消费,服务器宕机或是网络等问题导致的消息丢失,场景下的消息堆积等等,都是需要进一步解决的

有感

编程之路漫长而道远
正如学如逆水行舟不进则退
编程不仅是一份工作更是属于自己的爱好
知识的积累需要时间来推动

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号