我刚刚建立了连接到SQL Server数据库的 WSO2 Message Broker 3.0.0 。
Carbon MB组件的DB也已成功创建。
创建了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_MAPPING & MB_QUEUE_COUNTER 为空。
尽管MB_QUEUE表中有许多队列,但“列表队列”屏幕仍为空白。堆栈跟踪也显示错误,但不包括在内,因为它与上述错误无关。
但我可以创建一个主题就好了。
我想知道为什么当表格明确存在时,MB会说MB_QUEUE_MAPPING表是无效的对象名称?
答案 0 :(得分:0)
我怀疑你配置mysql数据库的方式是不正确的。所以你可以更好地尝试以下两种情况之一,以确保这个问题。
1)首次使用-Dsetup参数或
启动服务器2)您可以参考文档(https://docs.wso2.com/display/MB300/Configuring+MySQL)“配置MySQL”并按顺序执行分步说明。
我已经尝试了第二种方案,当我添加queue时,我没有得到任何异常。我提到的文档必须更新如下。
您可以在步骤3中看到此命令。
mysql -u <db_user_name> -p -D<database_name> < '<WSO2MB_HOME>/dbscripts/mb-store/mysql-mb.sql ';
db_user_name - db的用户名。
database_name - 您在步骤1中创建的数据库名称。
WSO2MB_HOME - MB的主目录路径。
希望这可以帮助您解决此问题。
答案 1 :(得分:0)
似乎用户连接到MSSQL数据库没有正确的权限。最有可能SELECT
许可。我之所以说的原因是,当您添加队列时,它确实会被添加。这意味着用户具有INSERT
权限。添加队列后,页面将重定向到“队列列表”页面。用户必须具有SELECT
权限才能检索队列列表。主题没有被添加到数据库,它保持在注册表中。您可以通过wso2mb-3.0.0/repository/conf/datasources/master-datasources.xml
中的配置验证连接到MSSQL的用户。
<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>