JMS – это стандарт промежуточного ПО для рассылки сообщений между клиентами. В этом примере будет рассматриваться ActiveMQ JMS сервер. Сделаем простой месседжер.
Сначала скачаем и установим сервер: http://activemq.apache.org/activemq-5111-release.html (на момент написания статьи самая свежая версия 5.11.1)
Распаковываем и запускаем winXX/activemq.bat. В окне командной строки можно найти все адреса и порты, необходимые для работы. Заходим в админку (логин/пароль: admin/admin). Создаем очередь prospring4. Далее, с вкладки send отправьте тестовое сообщение в эту очередь.
Клиентский код
Конфиг
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
@Configuration @ComponentScan("example.jms") public class Config { @Bean public ActiveMQConnectionFactory connectionFactory(){ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); return connectionFactory; } @Bean @Autowired public DefaultMessageListenerContainer listenerContainer(SimpleMessageListener messageListener){ DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(); container.setConnectionFactory(connectionFactory()); container.setDestinationName("prospring4"); container.setMessageListener(messageListener); return container; } @Bean public JmsTemplate jmsTemplate(){ JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory()); jmsTemplate.setDefaultDestinationName("prospring4"); return jmsTemplate; } } |
Слушатель сообщений:
1 2 3 4 5 6 7 8 9 10 11 |
@Service public class SimpleMessageListener implements MessageListener { public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.println(textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } } |
Класс-отправитель сообщений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public interface MessageSender { void send(String message); } @Component public class SimpleMessageSender implements MessageSender { @Autowired private JmsTemplate jmsTemplate; public void send(final String message) { jmsTemplate.send(new MessageCreator() { public Message createMessage(Session session) throws JMSException { return session.createTextMessage(message); } }); } } |
Тест (должно прийти ваше тестовое сообщение):
1 2 3 4 5 6 7 8 |
public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); //MessageSender sender = context.getBean(MessageSender.class); //sender.send("Hello!!!3"); while (true){} } } |
JMS + Spring. Обмен сообщениями