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&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会将所有页面存储到本地目录,而不是基本
如何解决?
答案 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。