簡體   English   中英

JBoss 7.2 JMS消息傳遞隊列

[英]JBoss 7.2 jms messaging queue

我們在我的本地主機上運行一個獨立的JBoss 7.2,並使用standalone-full.xml,但使用的是輕量級版本,以便刪除所有不使用的東西-例如,刪除消息傳遞部分。

但是現在我正在嘗試使用jms使用隊列來執行MessageDrivenBean。 我首先將以下內容添加到standalone-full.xml中:

<extensions>
    <extension module="org.jboss.as.messaging"/>

    <subsystem xmlns="urn:jboss:domain:messaging:1.1">
        <hornetq-server>
            <persistence-enabled>true</persistence-enabled>
            <journal-file-size>102400</journal-file-size>
            <journal-min-files>2</journal-min-files>
            <connectors>
                <netty-connector name="netty" socket-binding="messaging"/>
                <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
                    <param key="batch-delay" value="50"/>
                </netty-connector>
                <in-vm-connector name="in-vm" server-id="0"/>
            </connectors>
            <acceptors>
                <netty-acceptor name="netty" socket-binding="messaging"/>
                <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
                    <param key="batch-delay" value="50"/>
                    <param key="direct-deliver" value="false"/>
                </netty-acceptor>
                <in-vm-acceptor name="in-vm" server-id="0"/>
            </acceptors>
            <security-domain>XXSecurityDomain</security-domain>
            <security-settings>
                <security-setting match="#">
                    <permission type="send" roles="guest"/>
                    <permission type="consume" roles="guest"/>
                    <permission type="createNonDurableQueue" roles="guest"/>
                    <permission type="deleteNonDurableQueue" roles="guest"/>
                </security-setting>`
            </security-settings>
            <jms-connection-factories>
                <connection-factory name="InVmConnectionFactory">
                    <connectors>
                        <connector-ref connector-name="in-vm"/>
                    </connectors>
                    <entries>
                        <entry name="java:/ConnectionFactory"/>
                    </entries>
                </connection-factory>
                <connection-factory name="RemoteConnectionFactory">
                    <connectors>
                        <connector-ref connector-name="netty"/>
                    </connectors>
                    <entries>
                        <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                    </entries>
                </connection-factory>
                <pooled-connection-factory name="hornetq-ra">
                    <transaction mode="xa"/>
                    <connectors>
                        <connector-ref connector-name="in-vm"/>
                    </connectors>
                    <entries>
                        <entry name="java:/JmsXA"/>
                    </entries>
                </pooled-connection-factory>
            </jms-connection-factories>
        </hornetq-server>
    </subsystem>

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:100}">
        <socket-binding name="messaging" port="5445"/>
        <socket-binding name="messaging-throughput" port="5455"/>

接下來,我使用一個以前已經工作過的現有servlet,並對其進行了修改:

public class XRequestServlet extends HttpServlet
    Context mQueueContext = null;
    ConnectionFactory mConnectionFactory = null;
    Connection mConnection = null;

    public void init() throws ServletException {
        try {
            log.info("init()");

            mQueueContext = new InitialContext();
            mConnectionFactory = (ConnectionFactory) mQueueContext.lookup("/ConnectionFactory");

    } catch (NamingException e) {
        e.printStackTrace();
    }
}


public void doPost(WebSession pWebSession, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    log.info("doPost()");
    String vDestinationName = "java:jboss/exported/jms/queue/testQueue";
    PrintWriter vOut = response.getWriter();

    try {
    log.info("1");

        mConnection = mConnectionFactory.createConnection();
        log.info("1.5");
        Queue vQueue = (Queue) mQueueContext.lookup(vDestinationName);
        log.info("2");

為了測試它,我在firefox中使用了RESTClient插件,我可以看到我的請求輸入了doPost(),並且看到了記錄doPost(),1和1.5,但是嘗試創建隊列失敗。 在jboss日志中,出現以下錯誤:

javax.naming.NameNotFoundException:jms / queue / testQueue-服務jboss.naming.context.java.jboss.exported.jms.queue.testQueue

有人可以給我建議嗎?

我沒有檢查其余的配置,但是導致錯誤的直接原因是您似乎沒有在JBoss中配置任何隊列,因此當您嘗試使用mQueueContext.lookup查找它時引發異常。

在jms-destinations下配置隊列,如下所示:

<subsystem xmlns="urn:jboss:domain:messaging:1.0">
   [...]
   <jms-destinations>
       <jms-queue name="testQueue">
           <entry name="jms/queue/test"/>
           <entry name="java:jboss/exported/jms/queue/test"/>
       </jms-queue>
   [...]
</subsystem>

有關在JBoss 7下設置JMS的更多文檔,請參閱https://docs.jboss.org/author/display/AS72/Messaging+configuration#Messagingconfiguration-JMSQueuesandTopics

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM