📑前言
本文主要是【Rabbitmq】——Rabbimq发送邮件并消费邮件的文章,如果有什么需要改进的地方还请大佬指出⛺️
🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:阿里云主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见Rabbimq发送邮件并消费邮件
1.配置application.yml文件
spring:
rabbitmq:
virtual-host: /test
username: admin
password: admin
addresses: localhost
2.定义消息队列的配置:RabbitConfiguration
package com.rabbitmqtest.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfiguration {
/**
* 导包时候注意是amqp这个包
* @return
*/
@Bean("directExchange") //定义交换机Bean,可以很多个
public Exchange exchange(){
//如果没有会自动进行创建
return ExchangeBuilder.directExchange("amq.direct").build();
}
@Bean("yydsQueue") //定义消息队列
public Queue queue(){
return QueueBuilder
.nonDurable("yyds") //非持久化类型
.build();
}
@Bean("binding")
public Binding binding(@Qualifier("directExchange") Exchange exchange,
@Qualifier("yydsQueue") Queue queue){
//将我们刚刚定义的交换机和队列进行绑定
return BindingBuilder
.bind(queue) //绑定队列
.to(exchange) //到交换机
.with("my-yyds") //使用自定义的routingKey
.noargs();
}
}
运行后打开rabbitmq:我们发现已经创建了yyds队列
3.监听类:TestListener
package com.rabbitmqtest.listener;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class TestListener {
@RabbitListener(queues = "yyds")
public void test(Message message){
System.out.println(new String(message.getBody()));
}
}
测试类进行测试
package com.rabbitmqtest;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RabbitmqTestApplicationTests {
//RabbitTemplate为我们封装了大量的RabbitMQ操作,已经由Starter提供,因此直接注入使用即可
@Resource
RabbitTemplate template;
@Test
void publisher() {
//使用convertAndSend方法一步到位,参数基本和之前是一样的
//最后一个消息本体可以是Object类型,真是大大的方便
template.convertAndSend("amq.direct", "my-yyds", "邮件信息");
}
}
结果:
//控制台会打印:邮件信息