Ошибка брокера сообщений WSO2 при добавлении очереди — недопустимое имя объекта

Я только что настроил брокер сообщений WSO2 3.0.0, подключающийся к базе данных SQL Server.

Также успешно создана БД для компонента Carbon MB.

БД для хранилища данных Message Broker создана и содержит таблицу MB_QUEUE_MAPPING.

Однако при добавлении очереди через пользовательский интерфейс MB я вижу следующую ошибку в трассировке стека:

[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 является недопустимым именем объекта, когда таблица явно существует?


person AzA    schedule 16.12.2015    source источник


Ответы (2)


Я подозреваю, что вы неправильно настроили базу данных 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 — имя пользователя БД.

имя_базы_данных — имя базы данных, которую вы создали на шаге 1.

WSO2MB_HOME — путь к домашнему каталогу для МБ.

Надеюсь, это поможет вам решить эту проблему.

person satkunam rajeenthini    schedule 05.01.2016

Кажется, что пользователь, подключающийся к базе данных 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>
person Indika Sampath    schedule 23.01.2016