Статьи

JMS с JBoss A-MQ на OpenShift. Извлеченные уроки об удаленных клиентах и ​​шифровании.


OpenShift — это «платформа открытого гибридного облачного приложения от Red Hat». Он поставляется в разных вариантах, и наиболее интересной частью для большинства вещей, которые вы хотите сделать, является платформа для разработки и хостинга общедоступных облачных приложений »
OpenShift Online «. Вы можете легко попробовать это, потому что использование OpenShift Online в облаке бесплатно и легко. Все, что нужно, это 
адрес электронной почты . Бесплатное предложение позволяет разместить до трех базовых устройств и разместить до трех приложений на разных языках и в разных средах. Если вам нужно больше, вы можете обновить свой план до платной версии. Для получения более подробной информации посетите 
веб-сайт сравнения функций .

JBoss A-MQ на OpenShift

Служба сообщений Java — это эффективный метод межсистемного взаимодействия даже между приложениями, не относящимися к Java. Основываясь на технологиях с открытым исходным кодом и строгих стандартах, RedHat OpenShift позволяет разработчикам легко перемещать свои приложения JMS в облако или создавать новые системы, использующие сообщения JMS с зашифрованным подключением к Интернету.

В этом посте будут рассмотрены способы использования двух основных приложений: 
WildFly 8  для размещения веб-приложений и 
JBoss A-MQ  для асинхронного обмена сообщениями. Оба приложения могут работать на передачах в рамках бесплатного уровня OpenShift.

Создание A-MQ Gear

Развернув A-MQ в облаке OpenShift, ваше оборудование получит несколько общедоступных портов. Клиентские системы могут затем использовать эти удаленные порты для подключения к вашей службе A-MQ. Конечные точки требуют шифрования, поэтому сообщения JMS никогда не будут отправляться в виде простого текста через Интернет.

Первым шагом в создании вашего механизма A-MQ является клонирование существующего картриджа JBoss Fuse A-MQ. Для тех, кто заинтересован в управлении картриджами, вы можете просмотреть
 полную информацию об этом картридже . (Примечание. Если вы ищете восходящий картридж с ActiveMQ, 
загляните в этот блог. )

rhc create-app amq http://is.gd/Q5ihum

После создания устройство предоставляет три важных элемента информации:

1. Административный пароль, который вы будете использовать для входа в JBoss Fuse для управления A-MQ.

2. Новый открытый ключ, который клиенты должны иметь для связи с A-MQ. Эта

информация выглядит как

—— НАЧАТЬ СЕРТИФИКАТ ——



—— КОНЕЦ СЕРТИФИКАТА ——

3. Список открытых портов, которые A-MQ использует для удаленных подключений.

Управление шифрованием в OpenShift

Разница между клиентами и вашим оборудованием OpenShift заключается в том, что OpenShift нужен закрытый ключ. Если вам нужно изменить ключи, файл хранилища ключей — FILENAME. Если вы меняете ключи, клиенты должны иметь открытый ключ, чтобы доверять ему. Если вы меняете ключи, вы должны перезапустить передачу. Если вы забыли скопировать свой сертификат во время создания экипировки или изменили хранилище ключей, и вам нужно извлечь его, используйте следующие команды:

keytool -list -keystore ~/jboss-amq/jboss-a-mq-6.1.0.redhat-378/etc/keystore.jks
keytool -exportcert -alias (whatever it says) -keystore -file openshiftamq.cer

Загрузите файл openshiftamq.cer с помощью клиента SFTP и настройте клиенты.

Управление шифрованием на клиентах 

1. Скопируйте текст вашего ключа в файл с именем amqpublic.cer. Скопируйте каждую строку, включая строки BEGIN и END.

2. Импортируйте публичный сертификат в доверенное хранилище, которое будут использовать ваши клиенты.

keytool -importcert -alias openshiftamq -file openshiftamq.cer openshiftamq.jks

3. Поместите файл openshiftamq.jks как ресурс classpath вашего приложения или где-нибудь запоминающееся. Вам больше не понадобится файл .cer, но вы все равно можете его хранить.

4. В клиентском коде настройте это хранилище доверия для использования с соединениями A-MQ. Если вы не сделаете этот шаг, клиенты не будут доверять серверу.

private ConnectionFactory connection(String url) {
    ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory(url);
    try {
        connectionFactory.setTrustStore("openshiftamq.jks"); //or file if not in classpath root
    } catch (Exception ex) {
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Unable to load trust store.", ex);
    }
    connectionFactory.setTrustStorePassword("put your password here");
    return connectionFactory;
}

Удаленная связь с клиентами 

Одно из преимуществ использования устройства OpenShift Fuse A-MQ состоит в том, что оно предоставляет несколько внешних портов. В результате ваша служба A-MQ доступна без использования команды rhc port-forward. URL для ваших клиентов A-MQ будет выглядеть так: 

ssl://gearname-YourDomain.rhcloud.com:PORT
  • Gearname — название вашего снаряжения в административной консоли.
  • YourDomain — Ваш стандартный домен OpenShift.
  • ПОРТ — числовой номер порта, указанный при создании картриджа.

Настройте клиенты, используя код ConnectionFactory из приведенного выше. 

Дополнительные конфигурации ActiveMQ в вашем OpenShift Gear

Многие параметры конфигурации из стандартного экземпляра A-MQ доступны в вашем экземпляре OpenShift. Файл конфигурации для этого

~/jboss-amq/jboss-a-mq-6.1.0.redhat-78/etc/activemq.xml

с несколькими оговорками. А именно, вы можете изменить протокол <transportConnector />, но не должны изменять IP или порт. Порты контролируются вашим OpenShift Gear и являются единственными, которые фактически разрешены из внешних областей.

Предотвращение случайного холостого хода Gear

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

Чтобы предотвратить такое поведение, автоматизируйте сценарий, который периодически взаимодействует с веб-консолью JBoss Fuse, или всегда подключайте хотя бы один клиент к вашему A-MQ.