springboot集成rabbitmq-工作队列模式

本篇文章只涉及到代码实现,具体rabbitmq原理可以参考前面文章<<RabbitMQ六种队列模式>>。

一、定义队列名称

package com.shuofeng.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 工作队列
 * @author menglingwei
 *
 */
@Configuration
public class ProducerConsumerConfig {
	
	@Bean
	public Queue myQueue() {
		Queue queue = new Queue("myqueue");
		return queue;
	}
	
}

启动加载并创建队列。

二、定义发送对象MAIL

package com.shuofeng.dto;

import java.io.Serializable;

public class Mail implements Serializable {

    private static final long serialVersionUID = -8140693840257585779L;
    private String mailId;
    private String country;
    private Double weight;


    public Mail() {
    }

    public Mail(String mailId, String country, double weight) {
        this.mailId = mailId;
        this.country = country;
        this.weight = weight;
    }

    public String getMailId() {
        return mailId;
    }

    public void setMailId(String mailId) {
        this.mailId = mailId;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    @Override
    public String toString() {
        return "Mail [mailId=" + mailId + ", country=" + country + ", weight="
                + weight + "]";
    }

}

三、定义生产者

package com.shuofeng.producer;

import com.shuofeng.dto.Mail;

public interface Producer {
	public void sendMail(String queue, Mail mail);
}
package com.shuofeng.producer.impl;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.shuofeng.dto.Mail;
import com.shuofeng.producer.Producer;

/**
 *    工作队列模式
 * @author menglingwei
 *
 */
@Transactional
@Service
public class ProducerImpl implements Producer {
	
	@Autowired
	private RabbitTemplate rabbitTemplate;

	@Override
	public void sendMail(String queue, Mail mail) {
		this.rabbitTemplate.convertAndSend(queue, mail);
	}

}

四、定义消费者

package com.shuofeng.customer;

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

import com.shuofeng.dto.Mail;

@Component
public class QueueListener1 {
	
	@RabbitListener(queues = "myqueue")
	public void displayMail(Mail mail) throws Exception {
		System.out.println("队列监听器1号收到消息" + mail.toString());
	}

}

五、测试

package com.shuofeng;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.test.context.web.WebAppConfiguration;

import com.shuofeng.dto.Mail;
import com.shuofeng.producer.impl.ProducerImpl;

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
@WebAppConfiguration
public class ProducerImplTest {
	
	@SpyBean
	private ProducerImpl producerImpl;
	
	@Test
	public void testSendMail() {
		Mail mail = new Mail();
		mail.setMailId("001");
		mail.setCountry("CHINA");
		mail.setWeight(2.2);
		this.producerImpl.sendMail("myqueue", mail);
	}
	
}

运行结果如下图:

 

从上图看出,消费者已经消费。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值