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

Fuse Integration Service - Setup JBDS and create first quickstart application

Before we go and start creating our first application, I want to show you how to setup your JBoss Developer Studio, create a small application from the quickstart example and then running it on Fuse Integration Service.

I am using JBoss Developer Studio version 9, you can find it here.
After download the

jboss-devstudio-9.0.0.GA-installer-eap.jar
double-click it, and start installing with default values.

After successful installation, we will need install the plugins for Fuse, on JBoss Central view, select software update, select enable early access.


And select JBoss Fuse Development for the plugin,


Click on install, and we are all set to go!

First thing first, we want to create a Fuse project to deploy on the base of Fuse Integration Service, which is OpenShift. If you have not installed it, please go back to my previous post for instructions. So on your JBDS, right click and start creating the project. Select new, maven project, if you have installed the plugin correctly, you should …

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 …

RHTE - Supercharge your integration services

Red Hat Tech Exchange has taken place in Vietnam, Ho Chi Minh city two weeks ago, it is a great event held by Red Hat in Asia Pacific Region. It is open to all Red Hat partners who are interested in learning what Red Hat is doing recently, see what the trend of the open source world, basically it is a great event to share your knowledge and experience, to meet other enthusiastic people.

I am very fortunate to talk in this great event, to talk about the things I have been working on and even discuss it with many. Also got lots of great ideas too. So here are the slide.

My first talk was with Thomas Qvarnström about how to handle large size data in JBoss Fuse and how JBoss Data Grid can help in the situation.

Here is the agenda of the talk, we will be talk about this in the up coming webinar on 24th Sept.

Integration often involves storing, retrieving, and transforming data. Using a traditional database in your integration is likely to becomes a bottleneck that is expensive and hard to …