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

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

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

    posts - 14,  comments - 37,  trackbacks - 0
     

    JBoss 4.0.2集群指南(二)

    建立JMS集群服務(wù)

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

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

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

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

      在jboss4.0.2中,系統(tǒng)采用hibernate的方式來(lái)保存消息,所以能夠兼容hibernate支持的所有數(shù)據(jù)庫(kù)。Jboss默認(rèn)采用hsql,在我們的例子中,將使用oracle9.2。首先需要配置連接到數(shù)據(jù)庫(kù)的jndi數(shù)據(jù)源。方法是把doc\examples\jca下的oracle-ds.xml文件拷貝到server\all\farm下,并且修改其中的參數(shù),保證數(shù)據(jù)庫(kù)能夠正確連接。Cluster啟動(dòng)后,該文件能夠通過(guò)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ù)源來(lái)保存jms消息。

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

    啟動(dòng)完成后,正常情況下會(huì)發(fā)現(xiàn)oracle數(shù)據(jù)庫(kù)中多出了三張表:
    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 用于保存處理消息過(guò)程中的一些重要的事務(wù)

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

      客戶端在發(fā)送jms消息的時(shí)候,首先需要向app server查詢jndi,在jbosscluster中,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)詢問(wèn),看他們的本地jndi中是否有匹配的對(duì)象,如果有則返回給客戶,如果所有的節(jié)點(diǎn)都沒(méi)有,則拋出異常。所有以all方式啟動(dòng)的jboss,都會(huì)打開(kāi)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,打開(kāi)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)單,接收到來(lái)自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ì)

    看到如下部署信息:

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

    下面寫個(gè)客戶端來(lái)測(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ù)表,里面沒(méi)有任何數(shù)據(jù),表示所有的消息都已經(jīng)被處理。
     Jboss的jms cluster功能與webspheremq比較起來(lái),是非常簡(jiǎn)陋的,可以配置的地方也很少,畢竟是免費(fèi)的東西。Jboss的論壇上透露,在jboss 6.0中將會(huì)有全新的jbossmessaging服務(wù),不知要等到何年何月。針對(duì)這個(gè)cluster,我做過(guò)簡(jiǎn)單的測(cè)試,800萬(wàn)左右的消息數(shù)量,無(wú)一丟失,應(yīng)該說(shuō)還算比較可靠。響應(yīng)時(shí)間也還過(guò)的去,在簡(jiǎn)單的網(wǎng)絡(luò)環(huán)境下,能夠應(yīng)付比較高的并發(fā)。


    posted on 2007-07-20 14:55 冰封的愛(ài) 閱讀(265) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产一区在线观看免费| 亚洲欧洲日韩不卡| 日本免费中文视频| 亚洲三级中文字幕| 免费国产a国产片高清网站| 国产精品青草视频免费播放| 亚洲欧洲精品视频在线观看| 国产美女无遮挡免费视频| 中文字幕免费不卡二区| 亚洲免费综合色在线视频| 亚洲精品白浆高清久久久久久| 久久久久国产精品免费免费搜索| 一级做a爰片久久毛片免费看| 亚洲视频网站在线观看| 亚洲国产午夜中文字幕精品黄网站| 久久精品一本到99热免费| 羞羞漫画页面免费入口欢迎你 | 久久精品国产亚洲AV大全| 国产免费资源高清小视频在线观看| 国产羞羞的视频在线观看免费| 亚洲成a人无码亚洲成www牛牛| 亚洲av成人无码久久精品| 国产一级高清视频免费看| 99久久99久久精品免费观看| 亚洲一级片免费看| 亚洲人成无码网站在线观看| 亚洲国产香蕉碰碰人人| 日韩成全视频观看免费观看高清| 8x8x华人永久免费视频| aa毛片免费全部播放完整| 亚洲国产精品99久久久久久 | 日韩亚洲人成在线综合| 亚洲综合久久成人69| 久久亚洲精品中文字幕三区| 国产精品成人免费综合| 性生交片免费无码看人| 老汉精品免费AV在线播放| 在线观看免费黄色网址| 日韩毛片免费一二三| 精品久久久久久亚洲中文字幕| 亚洲一卡二卡三卡四卡无卡麻豆|