I’m building a small project in spring, where I need to send the default password set by the superadmin to the admin’s gmail address (I want to do it via rabbitmg, let me know if you have any other tips). I’m using rabbitmq here, but after the message in the sent queue is unacked (localhost:15672 I can see this too), it is deleted instantly and even if the message reaches consumer, it is not sent to that gmail address. What do you think is the reason?
RabbitMQConfig:
@Configuration
public class RabbitMQConfig {
@Bean
public Queue emailQueue() {
return new Queue("emailQueue",false);
}
@Bean
public TopicExchange emailTopicExchange() {
return new TopicExchange("emailTopicExchange",true,false);
}
@Bean
public Binding binding(Queue emailQueue, TopicExchange emailTopicExchange) {
return BindingBuilder.bind(emailQueue).to(emailTopicExchange).with("email.key");
}
@Bean
public MessageConverter jsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
connectionFactory.setVirtualHost("/");
connectionFactory.setPort(5672);
return connectionFactory;
}
@Bean
public AmqpTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(jsonMessageConverter());
return rabbitTemplate;
}
}
EmailProducer
@Service
public class EmailProducer {
private final RabbitTemplate rabbitTemplate;
public EmailProducer(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendEmailMessage(String email, String password) {
Map<String, String> message = new HashMap<>();
message.put("email", email);
message.put("password", password);
rabbitTemplate.convertAndSend("emailTopicExchange", "email.key", message);
}
}
EmailConsumer
@Service
public class EmailConsumer {
private final MailService mailService;
public EmailConsumer(MailService mailService) {
this.mailService = mailService;
}
@RabbitListener(queues = "emailQueue")
public void receiveMessage(Map<String, String> message) {
String email = message.get("email");
String password = message.get("password");
mailService.sendMail(email, password);
}
}
MailService:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
public class MailService {
final JavaMailSender mailSender;
public void sendMail(String email,String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(private);
message.setTo(email);
message.setText("Salam sizin admin passwordunuz: " + text);
message.setSubject("Library Admin");
mailSender.send(message);
}
}
application.yml:
mail:
host: smtp.gmail.com
properties:
mail:
smtp:
auth: true
starttls:
enable: true
username: private
port: 587
password: private
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
3