springboot+RabbitMQ实现简单邮件服务,邮件发不出去
@Configuration
public class RabbitMQConfig {
//自定义消息转换器
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
//定制fanout类型的交换器
@Bean
public Exchange fanout_exchange(){
return ExchangeBuilder.fanoutExchange("fanout_exchange").build();
}
//定义1个消息队列
@Bean
public Queue fanout_queue_email(){
return new Queue("fanout_queue_email");
}
//把1个消息队列与交换器进行绑定
@Bean
public Binding bindingEmail(){
return BindingBuilder.bind(fanout_queue_email()).to(fanout_exchange()).with("").noargs();
}
}
@Service
public class EmailService {
@Autowired
private JavaMailSenderImpl mailSender;
@Value("${spring.mail.username}")
private String from;
public void sendSimpleEmail(String to,String title,String content){
//制作纯文本邮件
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(title);
message.setText(content);
try {
mailSender.send(message);
} catch (MailException e) {
e.printStackTrace();
}
}
}
public class Mail {
private Integer id;
private String to;
private String subject;
private String content;
//省略getter setter toString方法
}
@Service
public class RabbitMQService {
@Autowired
EmailService emailService;
/*
* 发布/订阅工作模式,处理邮件业务
*/
@RabbitListener(queues = "fanout_queue_email")
public void publishSubscribeConsumerEmail(Mail mail){
System.out.println("收到邮件信息:"+mail);
emailService.sendSimpleEmail(mail.getTo(),mail.getSubject(),mail.getContent());
System.out.println("邮件已发送");
}
}
测试方法
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void rabbitMQ(){
Mail mail = new Mail();
mail.setId(2);
mail.setTo("limiq@qq.com"); //测试时改为正常邮箱
mail.setSubject("主题是什么");
mail.setContent("内容是内容");
rabbitTemplate.convertAndSend("fanout_exchange","",mail);
}
测试虽然是绿的,但是邮件没发送到,我看控制台有这么个信息
Workers not finished.
RabbitMQ管理页面里队列是这样的
有人知道怎么解决吗?