Эти коды являются частью mq customer для получения сообщения о задаче отправки почты, поэтому карта полезной нагрузки записи содержит информацию об электронном письме, такую как адрес прибытия, информация о пользователе. это формат JSON, как:
{
"to": "aaa@bbb.com",
"userId": "12",
...
}
У меня есть слушатель для прослушивания mq, например:
@Component
public class RecDownloadListener {
private final JavaMailSender javaMailSender;
@Autowired
RecDownloadListener(JavaMailSender javaMailSender){
this.javaMailSender = javaMailSender;
}
@Autowired
@RabbitListener(queues = TASK)
private void listener(RecDownloadContentBuilder builder,
Channel channel,
@Payload Map<String, String> searchParams,
@Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag) {
//I want the builder could be auto injected like @Payload or @Hearder
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
String content = builder.getContent();
String title = builder.getEmailTitle();
String address = builder.getArriveAddress();
//use above info to update mimeMessage and send it.
javaMailSender.send(mimeMessage);
}
}
последние три аргумента будут заполнены автоматически, все они получены от rabbitmq, я хочу автоматически передать первый builder
, как я написал, а builder
как:
@Component
@Scope(SCOPE_PROTOTYPE)
class TaskContentBuilder {
private final Map<String, String> searchParams;
private final UserDao userDao;
private TemplateEngine templateEngine; //thymeleaf
@Autowired
RecDownloadContentBuilder(Map<String, String> searchParams, CpAccountDao cpAccountDao, TemplateEngine templateEngine) {
this.searchParams = searchParams;
this.cpAccountDao = cpAccountDao;
this.templateEngine = templateEngine;
}
public String getEmailContent(){
User user = userDao.findById(searchParams.get("userId"));
Context context = new Context;
// context.update(user.someInfomation())
return templateEngine.process(template, context);
}
public String getEmailTitle(){...}
public String getArriveAddress(){...}
}
одно из полей builder
dao
легко ввести, слушатель получит сообщение одно за другим очень быстро, построитель только для одной записи сообщения. я должен сделать (Map)searchParams
как возврат функции бина? Или это нормально, просто внедрить только dao
при создании экземпляра компоновщика и установить в searchParams
?