私はactivemqとspring jmsを使用します。私は問題があります。Spring jms activemq
これは、これは私のEmailHandlerである私の電子メールの送信
@Service
@PropertySource("classpath:/properties/dev/application.properties")
public class EmailSenderImpl implements EmailSender {
private static final Logger LOGGER = LoggerFactory.getLogger(EmailSenderImpl.class);
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Environment env;
@Override
public void sendEmail(final Users user, EmailCauses emailCause) {
LOGGER.debug("Sending email to user with id {} with cause {}", user.getId(), emailCause);
//Retrieve User profile which defined with lazy fetch type.
//It prevents org.hibernate.LazyInitializationException in jms message receiver method
user.getUserProfile();
jmsTemplate.send(env.getProperty(emailCause.getEmailQueueName()),
new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createObjectMessage(user);
}
}
);
}
です。
@Service
public class EmailHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(EmailHandler.class);
private JavaMailSender mailSender;
private VelocityEngine velocityEngine;
private MessageSource messageSource;
@Autowired
public EmailHandler (JavaMailSender mailSender, VelocityEngine velocityEngine, MessageSource messageSource) {
this.mailSender = mailSender;
this.velocityEngine = velocityEngine;
this.messageSource = messageSource;
}
//TODO - refactor method, add reserve server
@Transactional
public void processEmailNotifications (Users user) throws MessagingException, UnsupportedEncodingException {
LOGGER.debug("Preparing to send greeting email to user {}", user);
UserProfiles userProfile = user.getUserProfile();
Map <String, Object> model = new HashMap <>();
model.put("name", userProfile.getName());
model.put("patronymic", userProfile.getPatronymic());
model.put("token", UriUtils.encode(user.getConfirmationToken(), "UTF8"));
String email = user.getUserProfile().getEmail();
sendEmail(email, "email.wellcome.subject", model, "wellcome_email.vm");
}
private void sendEmail (String emailTo, String subjectMessage, Map<String, Object> model, String templateName) {
LOGGER.debug("Sending email to {} with subject message {}", emailTo, subjectMessage);
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper (message, true, "UTF-8");
helper.setTo(emailTo);
helper.setSubject(messageSource.getMessage(subjectMessage, null, Locale.getDefault()));
String emailText = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateName, "UTF-8", model);
helper.setText(emailText, true);
mailSender.send(message);
LOGGER.info("Email to address {} with subject {} was sent successfully", emailTo, subjectMessage);
} catch (MessagingException me) {
LOGGER.error("Email to address {} was not sent", emailTo, me);
}
}
スタックトレースには次のようなログがあります。なぜそれが動作しないのか分かりません。
osjms.core.JmsTemplate - JMSセッション上で実行されるコールバック: ActiveMQSession {ID = ID:イゴール・熱望-5820TG-33061-1474030841626-1:7:1 =偽開始} 2016-を[http-bio-8080-exec-6] [DEBUG] osjms.core.JmsTemplate - 作成したメッセージの送信: ActiveMQTextMessage {commandId = 0、responseRequired = false、 messageId = null 、originalDestination =ヌル、originalTransactionId = ヌル、のproducerId =ヌル、宛先= NULL、のtransactionId =ヌル、 期限= 0、タイムスタンプ= 0、到着= 0、brokerInTime = 0、 brokerOutTime = 0、 ID = null、replyTo = null、永続性= false、type = null、優先度= 0、groupID = null、groupSequence = 0、 targetConsumerId = null、圧縮= false、ユーザーID = null、コンテンツ= null、marshalledProperties = null = XDDD}