MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2022年7月18日 星期一

ActiveMQ Artemis — AMQP v1.0 協定的測試(一):環境設置筆記

 這陣子總是碰到一些 queue 的環境,因此弄了一些測試環境。

這篇紀錄的是 ActiveMQ 環境,主要是要測試上面提供的 AMQP 協定。


這邊一樣在很省的 LXC 裡面設置 ActiveMQ Artemis 測試環境:
ActiveMQ 有分兩代,Classic 跟 Artemis,兩者支援的一些協定介接會有差別。
這邊從新版,採用 Artemis 版。
Apache 系列的 Java 軟體風格都是直接下載壓縮檔,開罐即可食用。

這邊仿著處理正式區使用所期望的單機基本設置。
 *) 專屬的 OS 執行帳號
 *) 資料目錄與執行檔分離
 *) 透過 OS SystemD 啟停

先放置好執行檔跟準備專屬帳號:執行檔參照傳統的放置方式,放到 /opt 底下(這邊用 RHEL 8 系列的環境)
[root@activemq-artemis ~]# groupadd --system activemq
[root@activemq-artemis ~]# useradd --system --home-dir /var/lib/activemq --gid activemq activemq
[root@activemq-artemis ~]# mkdir -p /var/lib/activemq
[root@activemq-artemis ~]# dnf install -y wget java-17 tar
[root@activemq-artemis ~]# wget https://dlcdn.apache.org/activemq/activemq-artemis/2.22.0/apache-artemis-2.22.0-bin.tar.gz
[root@activemq-artemis ~]# tar -xvf apache-artemis-2.22.0-bin.tar.gz -C /opt/
[root@activemq-artemis ~]# chown -R activemq. /opt/apache-artemis-2.22.0/ /var/lib/activemq
[root@activemq-artemis ~]# 

進入特地建的 activemq 帳號,初始化一個 ActiveMQ Broker:這邊使用預設帳號跟密碼 admin/admin;此外也對網頁管理界面的存取作必要的設置(分別是服務的 bind address 以及 Cross-Origin Resource Sharing 設定)
[root@activemq-artemis ~]# su - activemq
[activemq@activemq-artemis ~]$ pwd
/var/lib/activemq
[activemq@activemq-artemis ~]$ mkdir artemis
[activemq@activemq-artemis ~]$ echo "ARTEMIS_HOME=/opt/apache-artemis-2.22.0/" >> ~/.bash_profile
[activemq@activemq-artemis ~]$ echo "ARTEMIS_HOME=/opt/apache-artemis-2.22.0/" >> ~/.bashrc
[activemq@activemq-artemis ~]$ source .bashrc
[activemq@activemq-artemis ~]$ ls $ARTEMIS_HOME/bin/
artemis  artemis.cmd  lib
[activemq@activemq-artemis ~]$ echo $HOME/artemis/
/var/lib/activemq/artemis/
[activemq@activemq-artemis ~]$ $ARTEMIS_HOME/bin/artemis create $HOME/artemis/
Creating ActiveMQ Artemis instance at: /var/lib/activemq/artemis

--user:
Please provide the default username:
admin

--password: is mandatory with this configuration:
Please provide the default password:
admin

--allow-anonymous | --require-login:
Allow anonymous access?, valid values are Y,N,True,False
N

Auto tuning journal ...
done! Your system can make 0.17 writes per millisecond, your journal-buffer-timeout will be 6056000

You can now start the broker by executing:  

   "/var/lib/activemq/artemis/bin/artemis" run

Or you can run the broker in the background using:

   "/var/lib/activemq/artemis/bin/artemis-service" start

[activemq@activemq-artemis ~]$ 
[activemq@activemq-artemis ~]$ grep 'http://localhost' ~/artemis/etc/bootstrap.xml
       <binding uri="http://localhost:8161">
[activemq@activemq-artemis ~]$ sed -e 's#http://localhost:8161#http://0.0.0.0:8161#g' -i ~/artemis/etc/bootstrap.xml
[activemq@activemq-artemis ~]$ grep '://localhost' artemis/etc/jolokia-access.xml
        <allow-origin>*://localhost*</allow-origin>
[activemq@activemq-artemis ~]$ sed -e 's#://localhost#://#g' -i artemis/etc/jolokia-access.xml
[activemq@activemq-artemis ~]$ 

弄一個 Systemd Unit File 方便之後啟停
[root@activemq-artemis ~]# cat << "EOF" >> /etc/systemd/system/activemq-artemis-2.22.0.service
[Unit]
Description=Apache ActiveMQ Artemis
After=network.target

[Service]
Type=forking
User=activemq
Group=activemq
Environment=BROKER=/var/lib/activemq/artemis/
ExecStart=/bin/bash -c "${BROKER}/bin/artemis-service start"
ExecStop=/bin/bash -c "${BROKER}/bin/artemis-service stop"
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
EOF
[root@activemq-artemis ~]# systemctl daemon-reload
[root@activemq-artemis ~]# 

啟停服務測試一下
[root@activemq-artemis ~]# service activemq-artemis-2.22.0 start
Redirecting to /bin/systemctl start activemq-artemis-2.22.0.service
[root@activemq-artemis ~]# service activemq-artemis-2.22.0 status
Redirecting to /bin/systemctl status activemq-artemis-2.22.0.service
 activemq-artemis-2.22.0.service - Apache ActiveMQ Artemis
   Loaded: loaded (/etc/systemd/system/activemq-artemis-2.22.0.service; disabled; vendor prese
t: disabled)
  Drop-In: /run/systemd/system/activemq-artemis-2.22.0.service.d
           └─zzz-lxc-service.conf
   Active: active (running) since Sat 2022-06-11 13:48:13 UTC; 2s ago
  Process: 1525 ExecStart=/bin/bash -c ${BROKER}/bin/artemis-service start (code=exited, statu
s=0/SUCCESS)
 Main PID: 1532 (java)
    Tasks: 22 (limit: 1649948)
   Memory: 104.9M
   CGroup: /system.slice/activemq-artemis-2.22.0.service
           └─1532 java -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx2G -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline=true -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=file:/var/lib/activemq/artemis/etc/jolokia-access.xml -Dhawtio.role=amq -Xbootclasspath/a:/opt/apache-artemis-2.22.0/lib/jboss-logmanager-2.1.10.Final.jar:/opt/apache-artemis-2.22.0/lib/wildfly-common-1.5.2.Final.jar -Djava.security.auth.login.config=/var/lib/activemq/artemis/etc/login.config -classpath /opt/apache-artemis-2.22.0/lib/artemis-boot.jar -Dartemis.home=/opt/apache-artemis-2.22.0 -Dartemis.instance=/var/lib/activemq/artemis -Djava.library.path=/opt/apache-artemis-2.22.0/bin/lib/linux-x86_64 -Djava.io.tmpdir=/var/lib/activemq/artimis/tmp -Ddata.dir=/var/lib/activemq/artemis/data -Dartemis.instance.etc=/var/lib/activemq/artimis/etc -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dlogging.configuration=file:/var/lib/activemq/artemis/etc//logging.properties -Dartemis.default.sensitive.string.codec.key= org.apache.activemq.artemis.boot.Artemis run

Jun 11 13:48:12 activemq-artemis systemd[1]: Starting Apache ActiveMQ Artemis...
Jun 11 13:48:12 activemq-artemis bash[1525]: Starting artemis-service
Jun 11 13:48:13 activemq-artemis bash[1525]: artemis-service is now running (1532)
Jun 11 13:48:13 activemq-artemis systemd[1]: Started Apache ActiveMQ Artemis.
[root@activemq-artemis ~]# 
[root@activemq-artemis ~]# service activemq-artemis-2.22.0 stop
Redirecting to /bin/systemctl stop activemq-artemis-2.22.0.service
[root@activemq-artemis ~]# service activemq-artemis-2.22.0 status
Redirecting to /bin/systemctl status activemq-artemis-2.22.0.service
 activemq-artemis-2.22.0.service - Apache ActiveMQ Artemis
   Loaded: loaded (/etc/systemd/system/activemq-artemis-2.22.0.service; disabled; vendor prese
t: disabled)
  Drop-In: /run/systemd/system/activemq-artemis-2.22.0.service.d
           └─zzz-lxc-service.conf
   Active: failed (Result: exit-code) since Sat 2022-06-11 13:48:34 UTC; 1s ago
  Process: 1614 ExecStop=/bin/bash -c ${BROKER}/bin/artemis-service stop (code=exited, status=0/SUCCESS)
  Process: 1525 ExecStart=/bin/bash -c ${BROKER}/bin/artemis-service start (code=exited, status=0/SUCCESS)
 Main PID: 1532 (code=exited, status=143)

Jun 11 13:48:12 activemq-artemis systemd[1]: Starting Apache ActiveMQ Artemis...
Jun 11 13:48:12 activemq-artemis bash[1525]: Starting artemis-service
Jun 11 13:48:13 activemq-artemis bash[1525]: artemis-service is now running (1532)
Jun 11 13:48:13 activemq-artemis systemd[1]: Started Apache ActiveMQ Artemis.
Jun 11 13:48:32 activemq-artemis systemd[1]: Stopping Apache ActiveMQ Artemis...
Jun 11 13:48:32 activemq-artemis bash[1614]: Gracefully Stopping artemis-service
Jun 11 13:48:33 activemq-artemis systemd[1]: activemq-artemis-2.22.0.s
ervice: Main process exited, code=exited, status=143/n/a
Jun 11 13:48:34 activemq-artemis systemd[1]: activemq-artemis-2.22.0.s
ervice: Failed with result 'exit-code'.
Jun 11 13:48:34 activemq-artemis systemd[1]: Stopped Apache ActiveMQ Artemis.
[root@activemq-artemis ~]# 

啟動後可以連接這個網址(hostname 替代成真正 IP,這不重要就不記下來)
http://activemq-artemis:8161/console(會導向到子頁面 console/auth/login)
登入前面輸入的帳密 admin

Artemis 有支援帳密與權限管控,可以加一個帳號跟設定權限。不過還要指定 queue 的存取權限。
這塊以後有緣在看看怎處理。現在狀況只要用 admin 帳號就可以順利介接測試。
以下是紀錄找到的增加新帳號的指令,先留作參考。
[activemq@activemq-artemis ~]$ ~/artemis/bin/artemis user add  --user-command-user testuser --user-command-password testpwd --role admin --user admin --password admin
Connection brokerURL = tcp://localhost:61616
testuser added successfully.
[activemq@activemq-artemis ~]$ 

在網頁界面翻找一下,我還沒看到增加 queue 的有關按鈕。這部份就直接透過 client 介接來產生。這塊留著在下一篇測試 golang 介接處理(需要分別準備 producer 與 consumer)。

ActiveMQ 是一種偏向萬用型的 message queue,它支援許多種介接協定,像是 AMQP、JMS、OpenWire、STOMP、MQTT;而對於資料的處理模式,有分成 queue 跟 topic 兩種。

這次的筆記主要是以 AMQP 介接為主。
不過 AMQP 就現在所看到的材料,有分成 0.9.1 跟 1.0 兩種世代,兩種世代的協定互不相容,在對應的 driver 選用需要注意。ActiveMQ Artemis 提供的 AMQP 協定版本為 v1.0,因此後面的測試將找相容於 AMQP v1.0 的 library 作筆記。


參考資料
設置

現成的 Python 介接程式範例

Golang 介接 AMQP v1.0 的 driver
Golang 介接 AMQP v0.9.1 的 driver:這個不相容 ActiveMQ 提供的 AMQP v1.0 協定
amqp091 package - github.com/rabbitmq/amqp091-go - Go Packages

activemq address vs queue:這塊目前還沒搞懂,先記下來。
Address Model · ActiveMQ Artemis Documentation
Chapter 8. Addresses, Queues, and Topics Red Hat AMQ 7.2

沒有留言:

張貼留言