Springboot整合RabbitMQ实现工作模型(包含能者多劳的形式)

生产者代码

package com.example.newrabbitmq;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest( classes = NewRabbitMqApplication.class)
@RunWith( SpringRunner.class )
class NewRabbitMqApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    // 工作模式
    @Test
    void contextLoads2() {
        for (int i = 0 ; i <= 10 ; i++ ){
            rabbitTemplate.convertAndSend( "springboot_work", "spring整合的工作模式 "+i );
        }
    }

}

消费者代码

package com.example.newrabbitmq.serive;

import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class Customer2 {

    @RabbitListener( queuesToDeclare = @Queue("springboot_work") )
    public void test1(String s) throws InterruptedException {
        Thread.sleep(100);
        System.out.println( "消费者1" + s);
    }

    @RabbitListener( queuesToDeclare = @Queue("springboot_work") )
    public void test2(String s){
        System.out.println( "消费者2" + s);
    }
    
}

运行截图

在这里插入图片描述
在这里插入图片描述

反思与改进

我们发现这样的分配机是平均分配,我们希望能实现能者多劳。可以通过更改配置文件的参数来解决这一个问题。

spring:
  rabbitmq:
    host: 106.15.73.43
    port: 5672
    username: admin
    password: 123
    virtual-host: /rabbitmq_zhj
    listener:
      simple:
        # 公平分发
        prefetch: 1

在这里插入图片描述


版权声明:本文为qq_42091436原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。