Artemis ActiveMQ无法连接到Postgres

时间:2018-04-24 12:39:51

标签: postgresql activemq activemq-artemis

Ubuntu 16.04 Xenial Artemis ActiveMQ 2.4.0(localhost) pgAdmin的(搬运工)+ postgres的(搬运工) 我可以通过pgadmin连接到base,但是artemis不能 我想将Artemis连接到我的商店页面基础,但是一开始,我遇到了麻烦:

2018-04-24 14:57:58,534 INFO  [org.apache.activemq.artemis.core.server] AMQ221000: live Message Broker is starting with configuration Broker Configuration (clustered=false,jdbcDriverClassName=org.postgresql.Driver,jdbcConnectionUrl=jdbc:postgresql://localhost:5432/postgres?user=super&password=super,messageTableName=MESSAGE_TABLE,bindingsTableName=BINDINGS_TABLE,largeMessageTableName=LARGE_MESSAGES_TABLE,pageStoreTableName=PAGES_TABLE,)
2018-04-24 14:57:58,566 ERROR [org.apache.activemq.artemis.core.server] AMQ224000: Failure in initialisation: java.lang.IllegalStateException: The maximum name size for the page store table prefix is 10 characters: THE PAGING STORE CAN'T START

有我的配置: broker.xml

      <store>
     <database-store>
        <jdbc-connection-url>jdbc:postgresql://192.168.20.173:5432/postgres?user=super&amp;password=super</jdbc-connection-url>
        <page-store-table-name>PAGES_TABLE</page-store-table-name>
        <bindings-table-name>BINDINGS_TABLE</bindings-table-name>
        <message-table-name>MESSAGE_TABLE</message-table-name>
        <large-message-table-name>LARGE_MESSAGES_TABLE</large-message-table-name>
        <jdbc-driver-class-name>org.postgresql.Driver</jdbc-driver-class-name>
     </database-store>
  </store>

默认情况下,Artemis会将所有页面存储到本地目录,而不是基本

如何解决?

2 个答案:

答案 0 :(得分:1)

相关错误消息描述了问题:

The maximum name size for the page store table prefix is 10 characters

查看代码,此处的“页面存储表前缀”基于代理的配置。在您的情况下,您正在使用:

PAGES_TABLE

这是11个字符。这里的默认值是:

PAGE_TABLE

这是10个字符。如果你在这里使用一个10个字符或更少的字符,那么我希望错误消失。

这里的问题是一些RDBMS(例如Oracle)只能支持最多30个字符的表名,而page-store-table-name实际上只是一个表的前缀,这些表将在其名称后附加一个20个字符的UUID 。因此,page-store-table-name必须为10个字符或更少才能占用UUID,并且仍然保持在30个字符的限制之内。

答案 1 :(得分:1)

正如其他人(例如贾斯汀)已经提到的那样,代码和代码注释之间似乎存在错位,但幸运的是,相关的JIRA报告了一个更明确的描述来解释这个限制:

  

ARTEMIS-1084   Oracle12C的表名大小限制为30个字符。使用分页和表名> 10个字符时。 Artemis工作正常,直到它的页面UUID大小超过20个字符。然后开始无法翻页。

总之,完整的页表名称由:

给出
struct LASheader
{
    unsigned short x;
    char y[16];
    unsigned char v1;
    unsigned char v2;
    char y1[68];
    unsigned short a;
    unsigned long b;
    unsigned long c;
    unsigned char z;
    unsigned short d;
    unsigned long e;
}

void main()
{    
    FILE *ptr = fopen("E:\\Pablo\\file.las", "rb");
    //I go at the end of the file to get the size
    fseek(ptr, 0L, SEEK_END);
    unsigned long long size = ftell(ptr);

    struct LASheader lasHeader;
    //I want an offset of 6 bytes
    fseek(ptr, 6, SEEK_SET);
    fread(&lasHeader, sizeof(lasHeader), 1, ptr);

    unsigned short a1 = lasHeader.a;
    unsigned long b1 = lasHeader.b;
    unsigned long c1 = lasHeader.c;
    unsigned short d1 = lasHeader.d;
    unsigned long e1 = lasHeader.e;
}

Oracle 12c只允许表名的30个字符,这意味着:

page-store-table-name + UUID binary encoded form

使用UUID二进制编码形式page-store-table-name <= 30 - UUID binary encoded form length 字节。那就是:

length = 16 + 4 (the '-' char) = 20

我看到的问题是,对于任何DBMS都不应强制执行此限制,但仅适用于oracle 12c。