4

我刚刚设置了一个连接到 SQL Server DB的WSO2 Message Broker 3.0.0 。

Carbon MB 组件的数据库也已成功创建。

Message Broker 数据存储的数据库已创建并包含表MB_QUEUE_MAPPING

但是,当通过 MB UI 添加队列时,我在堆栈跟踪中看到以下错误:

[2015-12-16 15:00:41,472] ERROR {org.wso2.andes.store.rdbms.RDBMSMessageStoreImpl} -  Error occurred while retrieving destination queue id for destina
tion queue TestQ
java.sql.SQLException: Invalid object name 'MB_QUEUE_MAPPING'.
        at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
        at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
        at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
        at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
        at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505)
        at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:1029)
        at org.wso2.andes.store.rdbms.RDBMSMessageStoreImpl.getQueueID(RDBMSMessageStoreImpl.java:1324)
        at org.wso2.andes.store.rdbms.RDBMSMessageStoreImpl.getCachedQueueID(RDBMSMessageStoreImpl.java:1298)
        at org.wso2.andes.store.rdbms.RDBMSMessageStoreImpl.addQueue(RDBMSMessageStoreImpl.java:1634)
        at org.wso2.andes.store.FailureObservingMessageStore.addQueue(FailureObservingMessageStore.java:445)
        at org.wso2.andes.kernel.AMQPConstructStore.addQueue(AMQPConstructStore.java:116)
        at org.wso2.andes.kernel.AndesContextInformationManager.createQueue(AndesContextInformationManager.java:154)
        at org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.updateState(InboundQueueEvent.java:151)
        at org.wso2.andes.kernel.disruptor.inbound.InboundEventContainer.updateState(InboundEventContainer.java:167)
        at org.wso2.andes.kernel.disruptor.inbound.StateEventHandler.onEvent(StateEventHandler.java:67)
        at org.wso2.andes.kernel.disruptor.inbound.StateEventHandler.onEvent(StateEventHandler.java:41)
        at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

“添加队列”屏幕并没有消失,但是队列确实被添加到数据库中的MB_QUEUE表中。两个表MB_QUEUE_MAPPINGMB_QUEUE_COUNTER都是空白的。

尽管 MB_QUEUE 表中有许多队列,但“列出队列”屏幕仍为空白。堆栈跟踪也显示错误,但不包括在内,因为它与上述错误无关。

不过,我可以创建一个主题。

我想知道当表明确存在时,为什么 MB 会说表 MB_QUEUE_MAPPING 是一个无效的对象名称?

4

2 回答 2

0

我怀疑您配置 mysql 数据库的方式不正确。因此您可以更好地尝试以下两种方案之一来确定此问题。

1) 首次使用 -Dsetup 参数启动服务器或

2)您可以参考文档(https://docs.wso2.com/display/MB300/Configuring+MySQL)“配置MySQL”并按照顺序给出的分步说明进行操作。

我已经尝试了第二种情况,并且在添加队列时没有遇到任何异常。并且我提到的文档必须如下更新。

您可以在步骤 3 中看到此命令。

 mysql -u <db_user_name> -p -D<database_name> < '<WSO2MB_HOME>/dbscripts/mb-store/mysql-mb.sql ';

db_user_name - 数据库的用户名。

database_name - 您在步骤 1 中创建的数据库名称。

WSO2MB_HOME - MB 的主目录路径。

希望这可以帮助您解决此问题。

于 2016-01-05T12:36:31.543 回答
0

似乎连接到 MSSQL 数据库的用户没有正确的权限。很可能是SELECT许可。我这么说的原因是,当你添加队列时,它确实被添加了。这意味着用户有INSERT权限。添加队列后,页面重定向到队列列表页面。用户必须具有SELECT检索队列列表的权限。主题没有添加到数据库中,它保留在注册表中。您可以验证从配置连接到 MSSQL 的用户,如下所示wso2mb-3.0.0/repository/conf/datasources/master-datasources.xml

<datasource>
   <name>WSO2_MB_STORE_DB</name>
   <jndiConfig>
       <name>WSO2MBStoreDB</name>
   </jndiConfig>
   <definition type="RDBMS">
         <configuration>
                    <url>jdbc:jtds:sqlserver://localhost:1433/wso2_mb</url>
                    <username>sa</username>
                    <password>sa</password>
                    <driverClassName>net.sourceforge.jtds.jdbc.Driver</driverClassName>
                    <maxActive>200</maxActive>
                    <maxWait>60000</maxWait>
                    <minIdle>5</minIdle>
                    <testOnBorrow>true</testOnBorrow>
                    <validationQuery>SELECT 1</validationQuery>
                    <validationInterval>30000</validationInterval>
                    <defaultAutoCommit>false</defaultAutoCommit>
         </configuration>
     </definition>
</datasource>
于 2016-01-23T02:08:25.120 回答