<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 24  文章 - 6  trackbacks - 0
    <2005年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    隨筆分類(23)

    積分與排名

    • 積分 - 13835
    • 排名 - 2084

    最新評(píng)論

    JBoss 4.0.2集群指南(二)

    建立JMS集群服務(wù)

    bromon原創(chuàng) 請(qǐng)尊重版權(quán)

      本問講解如何在jboss 4.0.2中建立jms消息集群服務(wù)器,本文以《jboss 4.0.2集群指南》為基礎(chǔ),請(qǐng)參照閱讀。(http://www.tkk7.com/bromon/archive/2005/12/16/24182.html)

      Jms集群的意義在于提升系統(tǒng)在處理消息時(shí)的并發(fā)能力,建立這樣的集群,有三個(gè)步驟:

    1、 配置jms消息持久化所使用的數(shù)據(jù)庫
    2、 配置分布式的jndi環(huán)境
    3、 配置分布式j(luò)ms

       在jboss 4.0.2中,系統(tǒng)采用hibernate的方式來保存消息,所以能夠兼容hibernate支持的所有數(shù)據(jù)庫。Jboss默認(rèn)采用hsql,在我們的例 子中,將使用oracle 9.2。首先需要配置連接到數(shù)據(jù)庫的jndi數(shù)據(jù)源。方法是把doc\examples\jca下的oracle-ds.xml文件拷貝到server\ all\farm下,并且修改其中的參數(shù),保證數(shù)據(jù)庫能夠正確連接。Cluster啟動(dòng)后,該文件能夠通過jboss的farm服務(wù),自動(dòng)拷貝到其他集群 節(jié)點(diǎn),并且自動(dòng)部署。假設(shè)jndi數(shù)據(jù)源的名稱為:GlobalDS將doc\examples\jms下的oracle-jdbc3- service.xml文件拷貝到server\all\deploy-hasingleton\jms目錄下,并且刪除該目錄下的hsqldb- jdbc2-service.xml。修改oracle-jdbc3-service.xml,在56行左右指定name的值為數(shù)據(jù)源的名字: GlobalDS。這樣系統(tǒng)會(huì)使用該數(shù)據(jù)源來保存jms消息。

    使用如下命令啟動(dòng)boss: run –c all

    啟動(dòng)完成后,正常情況下會(huì)發(fā)現(xiàn)oracle數(shù)據(jù)庫中多出了三張表:
    1、Jms_message_log  該表用于保存所有未處理的點(diǎn)對(duì)點(diǎn)消息,表結(jié)構(gòu)是:
        Messageid   消息id
       Destination  目的地
       Txid   事務(wù)id
       Txop   消息操作類型(a為新增,d為刪除)
       Messageblob  消息內(nèi)容

    2、JMS_REFERENCE_LOG 用于保存所有未處理的topic消息,表結(jié)構(gòu)是:
       Messageid
       Destination
       Txid
       Txop
       Messageblob
       Redelivered  消息是否被重發(fā)

    3、JMS_TRANSACTION_LOG 用于保存處理消息過程中的一些重要的事務(wù)

      需要注意的是,jboss 3.2之后就不在支持以文件形式保存消息,雖然這樣最會(huì)比數(shù)據(jù)庫操作快一倍以上。Jboss官方的解釋是,使用文件會(huì)讓系統(tǒng)不可靠。

       客戶端在發(fā)送jms消息的時(shí)候,首先需要向app server查詢jndi,在jboss cluster中,jndi是作為一個(gè)分布式的singleton出現(xiàn)的。每個(gè)節(jié)點(diǎn)除了有自己的jndi環(huán)境以外,整個(gè)cluster還具有一些全局的 jndi,客戶端在進(jìn)行jndi查詢的時(shí)候,只需要向這個(gè)全局的jndi進(jìn)行查詢,cluster如果在全局jndi中找不到對(duì)應(yīng)的jndi對(duì)象,就會(huì)按 次序向每個(gè)節(jié)點(diǎn)詢問,看他們的本地jndi中是否有匹配的對(duì)象,如果有則返回給客戶,如果所有的節(jié)點(diǎn)都沒有,則拋出異常。所有以all方式啟動(dòng)的 jboss,都會(huì)打開1100端口,這個(gè)端口是全局jndi的入口,所有節(jié)點(diǎn)都是如此。

      分布式的jndi有的節(jié)點(diǎn)有主次的區(qū)別,第一個(gè) 啟動(dòng)的jboss是主服務(wù)器,它會(huì)保存所有的全局jndi,其他的節(jié)點(diǎn)如果收到客戶查詢jndi的請(qǐng)求后,都會(huì)向主服務(wù)器請(qǐng)求數(shù)據(jù)。如果主服務(wù)器不幸 down掉,那么次節(jié)點(diǎn)會(huì)發(fā)現(xiàn)這個(gè)變化,然后啟動(dòng)自己的jndi環(huán)境,取代主服務(wù)器提供服務(wù)。

      下面是配置jms的jndi,打開server\all\deploy-hasingleton\jms下的jbossmq-destinations-

    service.xml文件,增加一個(gè)名為test的destination,如下:
      name="jboss.mq.destination:service=Queue,name=test">
       

    name="DestinationManager">jboss.mq:service=DestinationManager
     

      為了預(yù)防主服務(wù)器down了之后丟失該jndi,所以最好在每個(gè)節(jié)點(diǎn)都進(jìn)行這個(gè)配置。

      在jboss 4.0.2的默認(rèn)配置下,是不支持消息bean的集群的,要達(dá)到這個(gè)目的,必須下載一個(gè)jar包才能實(shí)現(xiàn),可以從這里獲得: http://blog.yam.com/bromon/archives/489460.html

      得到這個(gè)jar文件后,將它命名為cdot-jbossx.jar 文件放到server\all\deploy\jms下。下面編寫消息bean,它的功能很簡(jiǎn)單,接收到來自test隊(duì)列的消息后,打印消息id。

    public class TestJmsBean
        implements MessageDrivenBean, MessageListener {
      MessageDrivenContext messageDrivenContext;
      public void ejbCreate() {
        System.out.println("消息bean創(chuàng)建");
      }

      public void ejbRemove() {
      }

      public void onMessage(Message msg) {
        try
        {
          System.out.println(msg.getJMSMessageID());
        }catch(Exception e)
        {
          e.printStackTrace();
        }
      }

      public void setMessageDrivenContext(MessageDrivenContext messageDrivenContext) {
        this.messageDrivenContext = messageDrivenContext;
      }
    }

      把這個(gè)消息bean部署到server\all\farm目錄下,它會(huì)被自動(dòng)拷貝到cluster的其它節(jié)點(diǎn),并且被自動(dòng)部署,你會(huì)

    看到如下部署信息:

      上面顯示通過farm的方式,部署了一個(gè)名為GlobalDS的連接池,以及一個(gè)名為TestJms的消息bean。

    下面寫個(gè)客戶端來測(cè)試一下:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          Properties p = new Properties();
          p.put(Context.INITIAL_CONTEXT_FACTORY,
                "org.jnp.interfaces.NamingContextFactory");
          p.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
          p.put(Context.PROVIDER_URL, "172.16.0.116:1100"); // 全局jndi入口
          InitialContext ctx = new InitialContext(p);
          QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup(
              "ConnectionFactory");
          QueueConnection conn = qcf.createQueueConnection();

          Queue q = (Queue) ctx.lookup("queue/test");//查詢名為test的destination
          QueueSession session = conn.createQueueSession(false,
              QueueSession.AUTO_ACKNOWLEDGE);
          conn.start();
          QueueSender sender = session.createSender(q);
          for (int i = 0; i < 10000; i++) {
            TextMessage tm = session.createTextMessage(sdf.format(new Date()));
            sender.send(tm, DeliveryMode.PERSISTENT, 4, 0);//發(fā)送持久化消息
            System.out.print("第" + i);
          }

          conn.stop();
          session.close();
          conn.close();

       執(zhí)行一下,可以看到每個(gè)節(jié)點(diǎn)都創(chuàng)建了若干個(gè)消息bean,同時(shí)在處理消息,任意關(guān)閉一個(gè)次服務(wù)器,系統(tǒng)會(huì)自動(dòng)fail over。查看Jms_message_log數(shù)據(jù)表,里面沒有任何數(shù)據(jù),表示所有的消息都已經(jīng)被處理。
     Jboss 的jms cluster功能與websphere mq比較起來,是非常簡(jiǎn)陋的,可以配置的地方也很少,畢竟是免費(fèi)的東西。Jboss的論壇上透露,在jboss 6.0中將會(huì)有全新的jboss messaging服務(wù),不知要等到何年何月。針對(duì)這個(gè)cluster,我做過簡(jiǎn)單的測(cè)試,800萬左右的消息數(shù)量,無一丟失,應(yīng)該說還算比較可靠。響應(yīng) 時(shí)間也還過的去,在簡(jiǎn)單的網(wǎng)絡(luò)環(huán)境下,能夠應(yīng)付比較高的并發(fā)。

    posted on 2005-12-16 12:57 Sometimes Java 閱讀(346) 評(píng)論(0)  編輯  收藏 所屬分類: Tech Flow
    主站蜘蛛池模板: 亚洲欧美中文日韩视频| 永久免费av无码网站大全| 亚洲日产无码中文字幕| 国产成人精品免费视频动漫| 好猛好深好爽好硬免费视频| 亚洲宅男永久在线| 亚洲性久久久影院| 免费一级黄色毛片| 午夜爱爱免费视频| 日本19禁啪啪无遮挡免费动图| 99精品视频在线免费观看| 国产亚洲精品免费视频播放| 男女男精品网站免费观看| 亚洲精品自偷自拍无码| 亚洲麻豆精品果冻传媒| 亚洲视频在线播放| 久久精品国产亚洲AV麻豆网站| 亚洲AV无码一区二区三区在线观看 | 成人免费福利视频| 国产精品爱啪在线线免费观看| 免费播放在线日本感人片| 中文字幕不卡免费高清视频| caoporn成人免费公开| 在线免费视频你懂的| 国产日韩精品无码区免费专区国产 | 黄页免费视频播放在线播放| 国产亚洲女在线线精品| 国产一区二区三区免费观在线| 两个人的视频www免费| 91视频国产免费| 国产精品美女自在线观看免费 | 一级毛片aa高清免费观看| 亚洲精品美女久久久久久久| 色偷偷尼玛图亚洲综合| 国产精品网站在线观看免费传媒| 亚洲精品视频免费看| 免费国产高清视频| 亚洲麻豆精品果冻传媒| 国产久爱免费精品视频| 成年人性生活免费视频| 337p日本欧洲亚洲大胆色噜噜|