メッセージサーバのインストール
最終更新日: 2020年3月14日
R8 | R9
Apache ActiveMQ Artemis は Apache が提供している Java Message Service (JMS) に対応したオープンソースソフトウェアです。
1. 次のサイトから apache-artemis-2.6.4-bin.zip をダウンロードします。(バージョン番号は最新のものに読み替えてください。)
ダウンロードアーカイブを展開します。ここでは C:\home\wagby に展開したものとします。
2. Brokerを作成します。usernameに "admin"、passwordに "admin"、Allow anonymous accessに "n" を入力した例を示します。
3. 起動します。
ログで、起動したサーバのポート番号を確認できます。
ログに表示されているHTTP ServerのURLにアクセスすると、Queueの状態やサーバの設定などを確認することができます。
ブローカー作成時に設定したアカウント、パスワードでログオンすることができます。
ディスク容量が90パーセント以上使用されている場合、デフォルトの設定だと、メッセージの送信に失敗します。Artemisのコンソールログに次のようなメッセージが表示されます。
ただしこのとき、wagbyapp アプリケーションでは読み込み中のままとなっています。この状態でArtemisを終了すると次のエラーがwagbyappアプリケーションのログ(system.log)に出力されます。
この対策として、apache-artemis-2.6.4\bin\mybroker\etc\broker.xmlの設定を90から100に変更するとよいでしょう。
Ctrl-Cにて終了することができます。
Rabbit MQ は Pivotal 社が提供するオープンソース製品です。
Cent OS 6 では、下記の手順でインストールすることができます。
次のコマンドで、Rabbit MQ が実行中であることを確認できます。
rabbitmqctl list_users で guestユーザが存在していることを確認できます。
AmazonMQ は AWS で利用できる Apache ActiveMQ のサービスです。
AWS が提供する次の手順に従って、ActiveMQ メッセージングブローカーを作成します。
テストで用いた設定は次のとおりです。
ブローカーの作成には15分ほどかかります。作成後は Web コンソールでブローカーの情報を確認できます。
テスト環境では、エンドポイントとして OpenWire, AMQP, STOMP, MQTT, WSS が用意されました。
EC2インスタンスを作成し、Wagbyアプリケーションを転送して、動作確認します。
EC2インスタンスの作成時に8921番ポートを外部からアクセスできるようにセキュリティグループに設定してください。
以降、EC2インスタンスへのscpによるファイル転送とssh接続によるコマンド実行を行って、Wagbyアプリケーションを実行するまでの操作を記します。
次のURLでアクセスできることを確認します。(URLは適切に読み替えてください。)
http://ec2-54-238-88-156.ap-northeast-1.compute.amazonaws.com:8921/wagby/
61617番ポートを外部からアクセスできるようにセキュリティグループに設定します。
EC2インスタンス上の次のファイルの設定を修正し、Wagbyアプリケーションを再起動してください。(修正後のURLは、お使いのAWS環境にあわせて適切に読み替えてください。)
修正前:
修正後:
オートスケールを設定している場合、キャッシュの制御にActiveMQを用いるため、同様の設定が wagbyapp/webapps/wagby/WEB-INF/classes/ehcache.xml にもあります。こちらも修正してください。
次のURLにてアクセスして、非同期処理のダウンロードやアップロード更新が行えるかを確認します。(URLは適切に読み替えてください。)
接続できない場合はログファイル(system.log)に次のようなエラーが出力されます。
次の点をご確認ください。
Apache ActiveMQ Artemis
C:\home\wagby\apache-artemis-2.6.4\bin>artemis.cmd create mybroker
Creating ActiveMQ Artemis instance at: C:\home\wagby\apache-artemis-2.6.4\bin\mybroker
--user: is a mandatory property!
Please provide the default username:
admin
--password: is mandatory with this configuration:
Please provide the default password:
--allow-anonymous | --require-login: is a mandatory property!
Allow anonymous access?, valid values are Y,N,True,False
n
Auto tuning journal ...
done! Your system can make 0.23 writes per millisecond, your journal-buffer-timeout will be 4328000
You can now start the broker by executing:
"C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\bin\artemis" run
Or you can setup the broker as Windows service and run it in the background:
"C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\bin\artemis-service.exe" install
"C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\bin\artemis-service.exe" start
To stop the windows service:
"C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\bin\artemis-service.exe" stop
To uninstall the windows service
"C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\bin\artemis-service.exe" uninstall
C:\home\wagby\apache-artemis-2.6.4\bin>cd mybroker\bin
C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\bin>artemis.cmd run
_ _ _
/ \ ____| |_ ___ __ __(_) _____
/ _ \| _ \ __|/ _ \ \/ | |/ __/
/ ___ \ | \/ |_/ __/ |\/| | |\___ \
/_/ \_\| \__\____|_| |_|_|/___ /
Apache ActiveMQ Artemis 2.6.4
2019-02-06 18:19:54,342 INFO [org.apache.activemq.artemis.integration.bootstrap] AMQ101000: Starting ActiveMQ Artemis Server
2019-02-06 18:19:54,588 INFO [org.apache.activemq.artemis.core.server] AMQ221000: live Message Broker is starting with configuration Broker Configuration (clustered=false,journalDirectory=data/journal,bindingsDirectory=data/bindings,largeMessagesDirectory=data/large-messages,pagingDirectory=data/paging)
2019-02-06 18:19:54,613 INFO [org.apache.activemq.artemis.core.server] AMQ221013: Using NIO Journal
2019-02-06 18:19:54,643 INFO [org.apache.activemq.artemis.core.server] AMQ221057: Global Max Size is being adjusted to 1/2 of the JVM max size (-Xmx). being defined as 536,870,912
2019-02-06 18:19:54,662 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-server]. Adding protocol support for: CORE
2019-02-06 18:19:54,663 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-amqp-protocol]. Adding protocol support for: AMQP
2019-02-06 18:19:54,663 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-hornetq-protocol]. Adding protocol support for: HORNETQ
2019-02-06 18:19:54,664 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-mqtt-protocol]. Adding protocol support for: MQTT
2019-02-06 18:19:54,664 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-openwire-protocol]. Adding protocol support for: OPENWIRE
2019-02-06 18:19:54,665 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-stomp-protocol]. Adding protocol support for: STOMP
2019-02-06 18:19:54,707 INFO [org.apache.activemq.artemis.core.server] AMQ221034: Waiting indefinitely to obtain live lock
2019-02-06 18:19:54,708 INFO [org.apache.activemq.artemis.core.server] AMQ221035: Live Server Obtained live lock
2019-02-06 18:19:54,892 INFO [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address DLQ supporting [ANYCAST]
2019-02-06 18:19:54,924 INFO [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue DLQ on address DLQ
2019-02-06 18:19:54,988 INFO [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address ExpiryQueue supporting [ANYCAST]
2019-02-06 18:19:54,993 INFO [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue ExpiryQueue on address ExpiryQueue
2019-02-06 18:19:55,440 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started NIO Acceptor at 0.0.0.0:61616 for protocols [CORE,MQTT,AMQP,STOMP,HORNETQ,OPENWIRE]
2019-02-06 18:19:55,457 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started NIO Acceptor at 0.0.0.0:5445 for protocols [HORNETQ,STOMP]
2019-02-06 18:19:55,473 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started NIO Acceptor at 0.0.0.0:5672 for protocols [AMQP]
2019-02-06 18:19:55,489 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started NIO Acceptor at 0.0.0.0:1883 for protocols [MQTT]
2019-02-06 18:19:55,505 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started NIO Acceptor at 0.0.0.0:61613 for protocols [STOMP]
2019-02-06 18:19:55,515 INFO [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
2019-02-06 18:19:55,515 INFO [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.6.4 [0.0.0.0, nodeID=5d4ce1a5-29f0-11e9-9c7b-00155d069193]
2019-02-06 18:19:55,912 INFO [org.apache.activemq.hawtio.branding.PluginContextListener] Initialized activemq-branding plugin
2019-02-06 18:19:56,295 INFO [org.apache.activemq.hawtio.plugin.PluginContextListener] Initialized artemis-plugin plugin
2019-02-06 18:20:00,209 WARN [org.apache.activemq.artemis.core.server] AMQ222210: Storage usage is beyond max-disk-usage. System will start blocking producers.
2019-02-06 18:20:02,511 INFO [io.hawt.HawtioContextListener] Initialising hawtio services
2019-02-06 18:20:02,534 INFO [io.hawt.system.ConfigManager] Configuration will be discovered via system properties
2019-02-06 18:20:02,538 INFO [io.hawt.jmx.JmxTreeWatcher] Welcome to hawtio 1.5.5 : http://hawt.io/ : Don't cha wish your console was hawt like me? ;-)
2019-02-06 18:20:02,542 INFO [io.hawt.jmx.UploadManager] Using file upload directory: C:\home\wagby\apache-artemis-2.6.4\bin\mybroker\tmp\uploads
2019-02-06 18:20:02,577 INFO [io.hawt.web.AuthenticationFilter] Starting hawtio authentication filter, JAAS realm: "activemq" authorized role(s): "amq" role principal classes: "org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal"
2019-02-06 18:20:02,656 INFO [io.hawt.web.JolokiaConfiguredAgentServlet] Jolokia overridden property: [key=policyLocation, value=file:/C:/cygwin64/home/mura/apache-artemis-2.6.4/bin/mybroker/etc/\jolokia-access.xml]
2019-02-06 18:20:02,779 INFO [io.hawt.web.RBACMBeanInvoker] Using MBean [hawtio:type=security,area=jmx,rank=0,name=HawtioDummyJMXSecurity] for role based access control
2019-02-06 18:20:12,212 INFO [io.hawt.system.ProxyWhitelist] Initial proxy whitelist: [localhost, 127.0.0.1, 10.0.75.1, mura-pc2, 192.168.107.97, mura-pc2.mshome.net, 192.168.6.145]
2019-02-06 18:20:12,652 INFO [org.apache.activemq.artemis] AMQ241001: HTTP Server started at http://localhost:8161
2019-02-06 18:20:12,652 INFO [org.apache.activemq.artemis] AMQ241002: Artemis Jolokia REST API available at http://localhost:8161/console/jolokia
2019-02-06 18:20:12,653 INFO [org.apache.activemq.artemis] AMQ241004: Artemis Console available at http://localhost:8161/console
2019-02-06 18:24:41,309 INFO [io.hawt.web.keycloak.KeycloakServlet] Keycloak integration is disabled
2019-02-06 18:24:47,737 INFO [io.hawt.web.LoginServlet] hawtio login is using 1800 sec. HttpSession timeout
ポート番号の確認
2019-02-06 18:19:55,440 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started NIO Acceptor at 0.0.0.0:61616 for protocols [CORE,MQTT,AMQP,STOMP,HORNETQ,OPENWIRE]
状態の確認
2019-02-06 18:20:12,653 INFO [org.apache.activemq.artemis] AMQ241004: Artemis Console available at http://localhost:8161/console
ディスク容量にご注意ください
2019-03-07 17:06:56,359 WARN [org.apache.activemq.artemis.core.server] AMQ222212: Disk Full! Blocking message production on address 'wagbyJobQueue'. Clients will report blocked.
2019-03-07 17:06:56 [DEBUG jp.jasminesoft.jfc.job.JfcjobstatusRegistryServiceJmsImpl sendJobMessage] use defaultDestinationName wagbyJobQueue
2019-03-07 17:06:56 [INFO jp.jasminesoft.jfc.job.JfcjobstatusRegistryServiceJmsImpl sendJobMessage] send jobmessage. destinationName=wagbyJobQueue, jobname=DownloadModel1Job, username=admin
2019-03-07 17:08:36 [WARN org.springframework.jms.listener.DefaultMessageListenerContainer handleListenerSetupFailure] Setup of JMS message listener invoker failed for destination 'wagbyJobQueue' - trying to recover. Cause: java.io.EOFException
2019-03-07 17:08:36 [WARN org.springframework.jms.listener.DefaultMessageListenerContainer handleListenerSetupFailure] Setup of JMS message listener invoker failed for destination 'wagbyUploadUpdateJobQueue' - trying to recover. Cause: java.io.EOFException
2019-03-07 17:08:36 [DEBUG jp.jasminesoft.jfc.job.JfcjobstatusRegistryServiceJmsImpl sendJobMessage] failed, occur Exception
org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Disposed due to prior exception
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:169)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:487)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:570)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:658)
at jp.jasminesoft.jfc.job.JfcjobstatusRegistryServiceJmsImpl.sendJobMessage(JfcjobstatusRegistryServiceJmsImpl.java:101)
at jp.jasminesoft.wagby.controller.model1.DownloadModel1Controller.sendJobMessage(DownloadModel1Controller.java:305)
at jp.jasminesoft.wagby.controller.model1.DownloadModel1Controller.do_downloadData(DownloadModel1Controller.java:270)
...
2019-03-07 17:08:37 [ERROR org.springframework.jms.listener.DefaultMessageListenerContainer refreshConnectionUntilSuccessful] Could not refresh JMS Connection for destination 'wagbyJobQueue' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect
2019-03-07 17:08:37 [ERROR org.springframework.jms.listener.DefaultMessageListenerContainer refreshConnectionUntilSuccessful] Could not refresh JMS Connection for destination 'wagbyUploadUpdateJobQueue' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect
<!-- once the disk hits this limit the system will block, or close the connection in certain protocols
that won't support flow control. -->
<max-disk-usage>90</max-disk-usage>
終了
Rabbit MQ
Cent OS 6
yumによるインストール
$ sudo yum install rabbitmq-server
$ sudo chkconfig --list rabbitmq-server
rabbitmq-server 0:off 1:off 2:off 3:off 4:off 5:off 6:off
$ sudo chkconfig rabbitmq-server on
$ sudo chkconfig --list rabbitmq-server
rabbitmq-server 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
実行中かどうかを確認する
$ sudo -u rabbitmq -i
$ rabbitmqctl status
Status of node rabbit@<ホスト名> ...
[{pid,9988},
{running_applications,[{rabbit,"RabbitMQ","3.1.5"},
...
$ rabbitmqctl list_users
Listing users ...
guest [administrator]
...done.
参考資料
Amazon MQ
AmazonMQのインスタンスを作成する
EC2インスタンスでのWagbyアプリケーションの起動
また、Wagbyアプリケーションは次節の「メッセージキューの設定」に従ってください。
$ scp -i ~/.ssh/YOURkey1 wagbyapp.zip ec2-user@ec2-54-238-88-156.ap-northeast-1.compute.amazonaws.com:
Enter passphrase for key '/home/mura/.ssh/YOURkey1':
activemqtest_wagbyapp_20190307.tar.gz 100% 123MB 5.4MB/s 00:22
$ ssh -i ~/.ssh/YOURkey1 ec2-user@ec2-54-238-88-156.ap-northeast-1.compute.amazonaws.com
...
[ec2-user@ip-172-30-2-40 ~]$ sudo yum install java-1.8.0-openjdk-devel
...
[ec2-user@ip-172-30-2-40 ~]$ unzip wagbyapp.zip
...
[ec2-user@ip-172-30-2-40 ~]$ cd wagbyapp/bin/
[ec2-user@ip-172-30-2-40 bin]$ ./startup.sh
Using CATALINA_BASE: /home/ec2-user/wagbyapp
Using CATALINA_HOME: /home/ec2-user/wagbyapp
Using CATALINA_TMPDIR: /home/ec2-user/wagbyapp/temp
Using JRE_HOME: /usr
Using CLASSPATH: /home/ec2-user/wagbyapp/bin/bootstrap.jar:/home/ec2-user/wagbyapp/bin/tomcat-juli.jar
Tomcat started.
[ec2-user@ip-172-30-2-40 bin]$ tail -f ../logs/catalina.out
...
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.14.RELEASE)
07-Mar-2019 17:31:39.972 INFO [localhost-startStop-1] org.hsqldb.persist.Logger.logInfoEvent open start - state modified
07-Mar-2019 17:31:40.174 INFO [localhost-startStop-1] org.hsqldb.persist.Logger.logInfoEvent checkpointClose start
07-Mar-2019 17:31:40.178 INFO [localhost-startStop-1] org.hsqldb.persist.Logger.logInfoEvent checkpointClose synched
07-Mar-2019 17:31:40.220 INFO [localhost-startStop-1] org.hsqldb.persist.Logger.logInfoEvent checkpointClose script done
07-Mar-2019 17:31:40.226 INFO [localhost-startStop-1] org.hsqldb.persist.Logger.logInfoEvent checkpointClose end
07-Mar-2019 17:32:14.325 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/ec2-user/wagbyapp/webapps/wagby] has finished in [68,005] ms
07-Mar-2019 17:32:14.328 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8921"]
07-Mar-2019 17:32:14.336 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
07-Mar-2019 17:32:14.338 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 68096 ms
セキュリティグループの設定
Wagbyアプリケーションの設定変更
spring.activemq.broker-url=failover:tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.broker-url=failover:ssl://b-51d382de-d5a3-42c2-8d29-5a51d0489a0b-1.mq.ap-northeast-1.amazonaws.com:61617
spring.activemq.user=<設定したアカウント>
spring.activemq.password=<設定したパスワード>
注意
動作の確認
http://ec2-54-238-88-156.ap-northeast-1.compute.amazonaws.com:8921/wagby/
トラブルシューティング
2019-03-07 18:18:31 [ERROR org.springframework.jms.listener.DefaultMessageListenerContainer refreshConnectionUntilSuccessful] Could not refresh JMS Connection for destination 'wagbyJobQueue' - retrying using FixedBackOff{interval=5000, currentAttempts=1, maxAttempts=unlimited}. Cause: Could not connect to broker URL: ssl://b-51d382de-d5a3-42c2-8d29-5a51d0489a0b-1.mq.ap-northeast-1.amazonaws.com:61617. Reason: java.net.SocketException: Socket closed