Skip to main content

Red Hat A-MQ - 透過Fabric 建立 A-MQ 的叢集,並設定AMQP的通訊協定

為了服務網大的全球觀眾,以後我的部落格會有英文版與中文版同時存在。所以你們發現有英文版的時候,就是中文版也快粗來了。

這次分享的是如何透過Red Hat A-MQ 裡面內建的管理工具 Fabric, 去建立訊息的Broker. 因為有這個工具,可以讓你在大量部署的環境下也可以很輕鬆的管理設定.

請到下面的JBoss網站下載我們這次會用到的A-MQ
http://www.jboss.org/products/amq.html

我們這次大概會有以下的動作,

1. 解壓縮安裝
2. 建立使用者
3. 啓動A-MQ 伺服器
4. 建立 Fabric
5. 建立 A-MQ broker profile
6. 建立 執行容器(Container)
7. 建立新的Profile 版本,並且設定AMQP 通訊協定
8. Container 版本更新
9. 測試是否成功

安裝也是解壓縮 jboss-a-mq-version.redhat-x.zip到你想要的路徑下

啓動A-MQ 之前,需要先設定使用者,
$A-MQ_INSTALLATION_PATH/etc/users.properties 
把前面admin=admin,admin的#拿掉

or you can add your own prefer user id,  password and role.
如果你不想用預設值的話,可以自己建ID,密碼還有角色。
(USER=PASSWORD,ROLE1,ROLE2,...)


要啓動A-MQ, 到 $A-MQ_INSTALLATION_PATH/bin ,執行

Unix/Linux,
                    ./amq

Windows, 
                     amq.bat



因為我們要透過Fabric 去管理Broker, 所以要先透過下面的指令把Fabric 建起來,

fabric:create --wait-for-provisioning

建立MQ 的 Broker 有兩種方法,一種是使用Hawtio 圖形用戶界面設定,或是透過下指令,這次先用指令,有機會再抓圖形.. 
建立一個A-MQ 屬於demo 群組的Profile 叫做mybroker,

mq-create --group demo mybroker



打 profile-list or profile-list | grep mybroker 就可以看到是否建立成功。

接下來我們要把broker 的設定檔加入 mq-broker-demo.mybroker 的profile裡面,

profile-edit --resource broker.xml mq-broker-demo.mybroker 

把下面的內容貼上,然後儲存
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!--
  Copyright (C) Red Hat, Inc.
 
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
 
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  -->
 
 
    <!-- Allows us to use system properties and fabric as variables in this configuration file -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties">
            <bean class="org.fusesource.mq.fabric.ConfigurationProperties">
        </bean></property>     
    </bean>
 
    <broker brokername="${broker-name}" datadirectory="${data}" restartallowed="false" start="false" xmlns="http://activemq.apache.org/schema/core">
 
        <destinationpolicy>
            <policymap>
              <policyentries>
                <policyentry producerflowcontrol="true" topic=">">
                  <pendingmessagelimitstrategy>
                    <constantpendingmessagelimitstrategy limit="1000">
                  </constantpendingmessagelimitstrategy></pendingmessagelimitstrategy>
                </policyentry>
                <policyentry memorylimit="1mb" producerflowcontrol="true" queue=">">
                </policyentry>
              </policyentries>
            </policymap>
        </destinationpolicy>
  
        <managementcontext>
            <managementcontext createconnector="false">
        </managementcontext>
 
        <persistenceadapter>
            <kahadb directory="${data}/kahadb">
        </kahadb></persistenceadapter>
 
        <plugins>
            <jaasauthenticationplugin configuration="karaf">
        </jaasauthenticationplugin></plugins>
 
        <systemusage>
            <systemusage>
                <memoryusage>
                    <memoryusage limit="64 mb">
                </memoryusage>
                <storeusage>
                    <storeusage limit="100 gb">
                </storeusage>
                <tempusage>
                    <tempusage limit="50 gb">
                </tempusage>
            </tempusage></storeusage></memoryusage></systemusage>
        </systemusage>
         
        <transportconnectors>
            <transportconnector name="openwire" uri="tcp://0.0.0.0:0?maximumConnections=1000">
        </transportconnector></transportconnectors>
    </managementcontext></broker>
 
</beans>


顯示profile 內容的時候應該可以看到我們這次新增的設定。

profile-display mq-broker-demo.mybroker 


現在Profile 已經設定好了,接下來,我們要建立三個容器,來執行剛剛設定好的profile.

container-create-child --profile mq-broker-demo.mybroker root demoContainer1
container-create-child --profile mq-broker-demo.mybroker root demoContainer2
container-create-child --profile mq-broker-demo.mybroker root demoContainer3




3 個容器應該會自行啓動,你可以透過以下指令看是否安裝成功。

container-list 

我們現在已經設定好了一個A-MQ broker 的主從式備份叢集,但是AMQP 的通訊協定尚未設定上去。

因為這次我想順便給大家看一下,如何透過Fabric做版本更新,所以我們就把AMQP 的設定變成這次修改的內容,

建立版本1.1
fabric:version-create 1.1

修改剛剛建立的broker.xml 檔案, 加入AMQP 的連接器。
profile-edit --resource broker.xml mq-broker-demo.mybroker 1.1

加入下方這一行到XML 的transportConnectors 段落中。
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672"/>
儲存. 

最後一個步驟,就是將每個執行容器的版本都更新到1.1
fabric:container-upgrade 1.1 demoContainer1
container-list 

剩下的也要,
fabric:container-upgrade 1.1 demoContainer2
fabric:container-upgrade 1.1 demoContainer3

現在,開始測試,請執行(下載測試程式)

git clone https://github.com/FuseByExample/activemq-amqp-example.git

到 
activemq-amqp-example/src/main/resources/jndi.properties 修改 connectionfactory.myJmsFactory 的設定到

amqp://admin:admin@localhost/test?brokerlist='tcp://0.0.0.0:5672




打開接收訊息的消費器,請到 activemq-amqp-example/ 路徑下執行,, 

mvn -P consumer

啓動訊息發送,

mvn -P producer

如果你看到接收器,接收訊息的日誌,表示你已經成功地設定好了!

Comments

Popular posts from this blog

Red Hat JBoss Fuse - Getting Started with Fuse Integration Service 2.0 Tech preview

I just realized that I did not do a getting started for Fuse Integration Service 2.0 Tech preview before I did the pipeline demo, thanks for those of you who reminded me! :)

To get started with FIS 2.0, for people who has just getting to know the technology, here is how I interpret it. Basically, it's divide into two aspect,

1. Integration development, FIS uses Apache Camel as the core technology that creates, orchestrate, compose microservices into a super lightweight thin integration layer, and become the API provider and service orchestrator through exposing RESTful or messaging service endpoints. And you can choose to either package and run it with Spring-Boot or Karaf.


2. Application Deployment and Management, FIS takes advantages of OpenShift platform, and allows you to separately deploy the micro-integration service among distributed environment, at the same time takes care of the failover, high availability, load balancing and service lookup problem for you.


So, now we know …

JBoss EAP 6 - 效能調校 (一) DataSource 的 Connection Pool

效能沒有什麼Best Practice, 反正能調整的就那些。 通常,一個程式的效能大概有70-80% 都跟程式怎麼寫的其實比較有關係。

最近我最疼愛的小貓Puji 因為膀胱結石開刀的時候過世了,心情很差請原諒我的口氣沒有很好,也沒有心情寫部落格。

Puji R.I.P.

=======================正文=======================

這個題目很多人叫我寫,可是這題目好大,這分明就是整死我咩~
所以我會分幾段慢慢寫。

JBoss 的 SubsystemDatasource WebWeb Service EJB Hibernate JMSJCAJVM 調校OS (作業系統)

先來看一下 DataSource Subsystem, DataSource 的部分主要是針對Connection Pool 做調校。

通常,程式都會需要跟資料庫界接,電腦在本機,尤其是在記憶體的運算很快,但是一旦要外部的資源連接,就是會非常的耗資源。所以現在的應用程式伺服器都會有個Pool 放一些先連接好的 資料庫connection,當程式有需要的時候就可以馬上提供,而不用花那些多餘的資源去連接資料庫。

這就是為什麼要針對Connection Pool 去做調校。

以下會討論到的參數,都是跟效能比較有關係,Datasource 還有很多參數,像是檢核connection 是否正確的,我都不會提到。如果你追求的是非常快速的效能,那我建議你一個檢核都不要加。當然,這樣就會為伺服器上面執行的程式帶來風險。這就是你要在效能與正確,安全性上面的取捨了。 (套句我朋友說的話,不可能又要馬兒好,又要馬兒不吃草的..)

最重要的調校參數就是 Connection 的 Pool 數量。(也就是那個Pool 裡面要放幾條的connection.) 這個參數是每一個應用程式都不一樣的。

min-pool-size 

Connection Pool 最少會存留的connection 數量

max-pool-size 

Connection Pool 最多可以開啓的 connection 數量

prefill

事先將connection pool 裡面建立好min-pool-size 的connection.

我的建議是觀察一下平常程式要用到的量設定為 min-pool-size 。
加上…

Red Hat JBoss Fuse/A-MQ - Fuse and A-MQ Version 6.3 GA is released!

Fuse and A-MQ 6.3 GA has just went out. Maybe, you would think this is just only a minor version release why should I care? Hold your thoughts on that! Because they have done a lot of improvements and also added many new features into this release.

Besides various bug fixes and making sure Fuse Fabric is much more stable. There are two major change in this version update:

New Tooling in JBoss Developer Studio (JBDS) 9.1 GA. Newer Apache Camel version – Camel v2.17. I was really impressed by the work put in to make developing Camel application much simpler. First is the installation of tooling itself. Now it has a all-in-one installer so you don't need to worry about which plugins you need to check. See the videos below to see the new "Getting Started" of Fuse 6.3.



And If you notice from the above video, the presentation of camel route in JBDS has also updated. It fixed some of the miss representation of logic and making it easier to read.

Old Camel Route
New Camel Route
On …