RabbitMQ 的快速使用

docker部署rabbitmq

shell 复制代码
 # management才有管理页面
docker pull rabbitmq:management

# 新建容器并运行
docker run \
 -e RABBITMQ_DEFAULT_USER=admin \ 
 -e RABBITMQ_DEFAULT_PASS=admin \ 
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 -itd \
 rabbitmq:management

# 查看运行状态
docker ps -a

导入RabbitMQ依赖

pom.xml

xml 复制代码
<!--AMQP依赖,包含RabbitMQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

提供者和消费者的配置

application.yml

yml 复制代码
spring:
  rabbitmq:
    host: 192.168.137.139 # 主机名
    port: 5672 # 端口
    virtual-host: / # 虚拟主机
    username: admin # 用户名
    password: admin # 密码

注意执行顺序:需要先使用consumer监听并创建队列,publisher再往里面添加队列才会有用,否则白添加队列


SimpleQueue

提供者: SimpleQueuePublisher.java

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void simpleQueueTest() {
        String msg = "hello, simple queue";
        rabbitTemplate.convertAndSend("simple.queue", msg);
    }
}

消费者:SimpleQueueConsumer.java

java 复制代码
@Component
public class SimpleQueueConsumer {
    @RabbitListener(queues = "simple.queue")
    public void simpleQueueConsumer(String msg) {
        System.out.println("simpleQueueConsumer: " + msg);
    }
}

Work Queues

可加配置

application.yml

yml 复制代码
spring:
  rabbitmq:
    listener:
      simple: # simple类型
        prefetch: 1 # consumer每次执行预取的数量

消费者:WorkQueueConsumer.java

java 复制代码
@Component
public class WorkQueueConsumer {
    @RabbitListener(queuesToDeclare = {@Queue(name = "work.queue")})
    public void workQueue1Consumer(String msg) throws InterruptedException {
        System.out.println("workQueue1Consumer: " + msg);
        Thread.sleep(10);
    }

    @RabbitListener(queuesToDeclare = {@Queue(name = "work.queue")})
    public void workQueue2Consumer(String msg) throws InterruptedException {
        System.out.println("workQueue2Consumer: " + msg);
        Thread.sleep(90);
    }
}

提供者: WorkQueuePublisher.java

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class WorkQueuePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void workQueueTest() {
        for (int i = 1; i <= 100; i ++ ) {
            String msg = "hello, work queue. " + i;
            rabbitTemplate.convertAndSend("work.queue", msg);
        }
    }
}

发布/订阅

Direct


Routing


Topics

相关推荐
辰辉创聚5 小时前
禽流感病毒分子基础:表面抗原与内部转录复合体的功能解析
ide·leetcode·rabbitmq·重组血凝素蛋白·甲型流感病毒核蛋白·禽流感单抗
九皇叔叔6 小时前
从本地事务到分布式事务
java·分布式·分布式事务·cap·base
她说..7 小时前
RabbitMQ 使用场景详解
java·spring boot·后端·spring·rabbitmq·java-rabbitmq
刃神太酷啦8 小时前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
weixin_4407305011 小时前
rabbitmq的使用记录-架构图、生产端、消费端、rabbitmqctl命令、重启MQ服务
rabbitmq
海宇大数据11 小时前
分布式网关架构实战:基于海宇数据公安二要素认证即时版构建自动化司机准入网关
人工智能·分布式·架构·自动化
xbgRS11 小时前
RabbitMQ使用
rabbitmq
木圭的AI时代指南1 天前
Spark-X2.5 长输入 Agent 实测:全量读取陷阱与解释器寻找死循环复盘,附可复现任务
大数据·分布式·spark
KANGBboy1 天前
doris+kafka安装部署(单机+集群)二时钟服务器 java_home
服务器·分布式
爱笑的k111 天前
分布式通信原语
分布式·ai infra