Вопросы на собеседование по JMS

max аватар
89
Находится в разделах:

Что такое JMS?

JMS - это сокращение от Java Messaging Service. Это java-решение для создания асинхронной системы обмена сообщениями. Является одной из официальных спецификаций технологий J2EE. 

 

Чем JMS отличается от RPC?

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

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

 

Каковы преимущества использования JMS?

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

 

Какие JMS продукты на рынке вы знаете?

MQ Series от IBM является одним из наиболее популярных продуктов, используемых в роли MOM (Message Oriented Middleware). Также, довольно известными продуктами являются SonicMQ, iBus. Любой сервер приложений, который соответствует спецификации J2EE, поставляется со своей собственной встроенной реализацией JMS.

 

Какие типы сообщений доступны в JMS API?

Message, TextMessage, BytesMessage, StreamMessage, ObjectMessage, MapMessage.

 

Какие парадигмы JMS вам известны?

Publish/Subscribe и Point to Point. 

 

В чем разница между топиком (topic) и очередью (queue)?

Топик обычно используется в случае с one-to-many парадигмой. Очередь используется для передачи сообщений вида one-to-one. Использует Point to Point парадигму. 

 

Какова роль JMS в разработке J2EE приложений?

JMS обычно используется в следующих сценариях разработки:

 

  1. Интеграция приложений:  Используется в тех случаях, когда существующее приложение нужно связать с новым посредством сообщений. 
  2. B2B или Business to Business: Части бизнес-логики могут взаимодействовать друг с другом посредством сообщений, поскольку JMS позволяет программным системам взаимодействовать друг с другом с использованием слабого связывания. 
  3. Географически распределенные единицы: JMS гарантирует безопасный обмен данными между географически распределенными объектами организации.
  4. Приложения вида "Один-ко-многим": Приложения, которым необходимо отсылать данные множеству клиентов в стиле one-to-many, подходящие кандидаты на использование JMS. Обычно, такими приложениями могут быть сайты аукционов, биржевые сервисы.
Для чего используется объект Message?
Объект Message - это простое сообщение, содержащее лишь заголовок и свойства и не несущее никакой полезной нагрузки. Они могут быть использованы в тех случаях, когда получателя необходимо уведомить о событии и нет необходимости передавать какие-либо данные. 
В чем отличие между моделями publish/subscribe  и P2P?
Модель Publish/Subscribe обычно используется в ситуациях one-to-many. Это ненадежно, но очень быстро. P2P используется в ситуациях one-to-one. Является очень надежной.
Для чего используется BytesMessage?
BytesMessage содержит массив примитивов в теле сообщения. Таким образом, может быть использован для передачи данных между двумя приложениями в их родном формате, который может быть несовместим с другими типами Message. Также, может быть полезным в тех случаях, когда JMS используется как транспорт между двумя системами. Поскольку в нем можно хранить примитивные типы данных, они могут быть неправильно интерпретированы. Например, long может быть сохранен как short. Это может вызывать ошибки. Поэтому рекомендуется читать данные строго в одном порядке и использовать те же типы данных, которые были использованы отправителем. 
Для чего используется StreamMessage?
StreamMessage содержит поток java примитивов в теле сообщения. Содержит несколько удобных методов для чтения данных, сохраненных в сообщении. Однако, StreamMessage предотвращает неправильную интерпретацию данных. Например, чтение long как short. Это достигается тем фактом, что StreamMessage записывает также информацию о типах данных, а не только их значения. 
Для чего используется TextMessage?
TextMessage содержит в виде сообщения объект java.lang.String. Таким образом, его полезно использовать для обмена текстовыми данными. Также, может быть использован для обмена комплексными текстовыми данными на подобии XML документов. 
Для чего используется ObjectMessage?
ObjectMessage содержит объекты, реализующие интерфейс Serializable. Тем самым, позволяя приложениям обмениваться друг с другом объектами Java. Получатель сообщения должен привести тип объекта сообщения к реальному типу объекта. Поэтому, перед получением объекта, получатель должен знать действительный тип отосланного объекта. Неправильное приведение типов может породить ClassCastException. Более того, определение класса объекта, отосланного в сообщении, должно быть доступно на обоих машинах. Если определение класса недоступно на получателе, будет порождено исключение ClassNotFoundException. Некоторые типы MOM могут поддерживать динамическую загрузку необходимых классов по сети, но спецификация JMS не определяет это как обязательный пункт. 
Для чего используется MapMessage?
MapMessage содержит данные в формате ключ-значение. Таким образом, тело сообщения представляет из себя ни что иное, как java.util.Properties объект. Значениями ключей могут быть Java примитивы или их врапперы. 
В чем разница между BytesMessage  и StreamMessage?
BytesMessage хранит данные примитивных типов посредством перевода их в байтовое представление. Таким образом, сообщение становится одни сплошным куском байтов. StreamMessage умеет различать типы данных, которые хранятся в теле сообщения, поскольку хранит информацию о типах данных. BytesMessage позволяет читать данные с использованием любого типа. Это может вызвать ошибки при неправильном считывание различных типов данных. Например, long считывается в short. 
Поддерживает ли JMS спецификация определение транзакций?
JMS спецификация определяет транзакционный механизм, позволяющий клиентам отсылать и получать группы логически связанных сообщений в виде одной единицы информации. Session может быть помечен как transacted. Это означает, что все сообщения, посланные из сессии, будут считаться частью транзакции. Набор сообщений можно закоммитить ( метод commit() ), а также откатить ( rollback()).
Если провайдер поддерживает распределенные транзакции, рекомендуется использовать XAResource API.
Какие шаги необходимо выполнить для отправки-получения сообщений?
  1. Использовать JNDI для получения объекта
  2. Получить ConnectionFactory
  3. Получить один или более объектов Destination
  4. С помощью ConnectionFactory создать JMS Connection.
  5. Использовать Connection для создания одной или более сессий (Session)
  6. Использовать Session и точки назначения (Destinations) для создания отправителей или получателей (MessageProducers-MessageConsumers).
Что такое JMS сессия (Session)?
Это однопоточный контекст для отсылки и получения JMS сообщений. JMS сессия может быть нетранзакционной, с поддержкой локальных транзакций, или участвовать в распределенных транзакциях.
В чем разница между durable и non-durable подписками (subscriptions)?
Point-to-Point (PTP). Эта модель позволяет обмениваться сообщениями через очереди (queues). Клиент может отсылать и получать сообщения от одного или нескольких очередей. Модель PTP легче, чем publisher/subscriber. 
Durable подписка гарантирует, что подписчик получит все сообщения, посланные на топик, а non-durable подписка не дает никаких гарантий насчет тех сообщений, которые были отосланы в момент, когда клиент был отключен от топика. 

Конец
Рене Декарт более, чем уверен в том, что люди с сильным и великодушным характером не меняют своего настроения в зависимости от своего благополучия или своих несчастий.

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке