Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Краденные лабы / 8308_Треско_Сергеев_ЛР№4

.pdf
Скачиваний:
3
Добавлен:
08.04.2023
Размер:
439.65 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ВТ

ОТЧЕТ по лабораторной работе №4

по дисциплине «Распределенные системы» Тема: JAVA MESSAGE SERVICE

Студенты гр. 8308

 

Треско М.Ю.

 

 

Сергеев В.С.

Преподаватель

 

Бекенева Я.А.

Санкт-Петербург

2022

Цель работы

Познакомиться с технологией JMS.

Основные теоретические положения:

Java Message Service - стандарт промежуточного ПО для рассылки сообщений, позволяющий приложениям, выполненным на платформе Java EE, создавать, посылать, получать и читать сообщения.

Коммуникация между компонентами, использующими JMS, асинхронна (процедура не дожидается ответа на своё сообщение) и независима от исполнения компонентов.

JMS поддерживает две модели обмена сообщениями: «от пункта к пункту» (объект Queue) и «издатель-подписчик» (объект Topic).

Модель «от пункта к пункту» характеризуется следующим:

1.Каждое сообщение имеет только одного адресата

2.Сообщение попадает в «почтовый ящик», или «очередь» адресата и может быть прочитано когда угодно. Если адресат не работал в момент отсылки сообщения, сообщение не пропадёт.

3.После получения сообщения адресат посылает извещение.

Модель «издатель-подписчик» характеризуется следующим:

1.Подписчик подписывается на определённую «тему»

2.Издатель публикует своё сообщение. Его получают все подписчики этой

темы

3.Получатель должен работать и быть подписан в момент отправки сообщения

Задание на лабораторную работу

Cоздать приложение, отправляющее сообщение в queue, и message-driven bean, читающий отправленное в queue сообщение.

2

Код программы

Таблица 1 - Исходный код

Application.java

/*

*Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license

*Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template

*/

package hello;

import javax.jms.ConnectionFactory;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer; import org.springframework.context.ConfigurableApplicationContext;

import org.springframework.context.annotation.Bean; import org.springframework.jms.annotation.EnableJms;

import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; import org.springframework.jms.core.JmsTemplate;

import org.springframework.jms.support.converter.MappingJackson2MessageConverter; import org.springframework.jms.support.converter.MessageConverter;

import org.springframework.jms.support.converter.MessageType;

@SpringBootApplication

@EnableJms

public class Application {

3

@Bean

public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,

DefaultJmsListenerContainerFactoryConfigurer configurer) {

DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

//This provides all boot's default to this factory, including the message converter configurer.configure(factory, connectionFactory);

//You could still override some of Boot's default if necessary.

return factory;

}

@Bean // Serialize message content to json using TextMessage public MessageConverter jacksonJmsMessageConverter() {

MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); converter.setTargetType(MessageType.TEXT);

converter.setTypeIdPropertyName("_type"); return converter;

}

public static void main(String[] args) { // Launch the application

ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);

// Send a message with a POJO - the template reuse the message converter System.out.println();

System.out.print("Receiver: ");

String To = System.console().readLine();

4

System.out.print("Message: ");

String Msg = System.console().readLine();

System.out.println("Sending message to " + To + "...");

jmsTemplate.convertAndSend("message_queue", new Message(To, Msg));

}

}

Message.java

/*

*Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this

license

*Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template

*/

package hello;

public class Message { private String receiver;

private String body;

public Message() {

}

public Message(String receiver, String body) { this.receiver = receiver;

this.body = body;

}

public String getReceiver() { return receiver;

5

}

public void setReceiver(String to) { this.receiver = to;

}

public String getBody() { return body;

}

public void setBody(String body) { this.body = body;

}

}

Receiver.java

/*

*Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this

license

*Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template

*/

package hello;

import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component;

@Component

public class Receiver {

@JmsListener(destination = "message_queue", containerFactory = "myFactory")

6

public void receiveMessage(Message message) {

System.out.println("Received message for " + message.getReceiver() + ": " + message.getBody());

}

}

Пример работы

Рисунок 1 - Ввод сообщения

7

Рисунок 2 - Сообщение доставлено

Вывод

В ходе выполнения лабораторной работы были получены навыки написания приложений, использующих механизм обмена сообщениями JMS.

8