【activemq artemis】消息持久化——文件系统以及jdbc
说明文档主要翻译自官方文档,关键环境的配置我加入一些描述和截图,整体配置还是挺顺利。
警告:Apache ActiveMQ Artemis JDBC持久性存储正在开发中,包含在其中用于评估。
Apache ActiveMQ Artemis JDBC 持久层提供了使用数据库存储代理状态(消息、地址和其他应用程序状态)的能力。
N、 B.JDBC持久层当前不支持地址完整策略分页(请参阅:关于分页的部分)。
文件日志是 ActiveMQ Artemis 推荐使用的配置,因为它提供了更高的性能,并且更加成熟。JDBC持久层的目标是那些必须使用数据库的用户,例如由于公司内部策略的原因。
ActiveMQ Artemis目前支持的数据库供应商数量有限(较旧的版本可以工作,但里程数可能有所不同):
PostgreSQL 9.4.x版
MySQL 5.7.x版本
ApacheDerby10.11.1.1版
JDBC存储使用JDBC连接将消息和绑定数据存储在数据库表中的记录中。存储在数据库表中的数据使用Apache ActiveMQ Artemis内部编码进行编码
jdbc 依赖得 添加运行时依赖项
添加运行时依赖项
运行时依赖项(如转移、转换器、代理插件、JDBC驱动程序、密码解码器等)必须在运行时由代理访问。将依赖项打包到jar中,并将其放在代理的类路径上。
这可以通过将jar文件放在代理发行版本身的lib目录或代理实例的lib目录中来完成。
默认情况下,代理实例没有lib目录,因此可能需要创建它。它应该与bin、data、log等目录放在“顶层”。
在与bin同级的目录里放入mysql驱动器
配置JDBC持久性
要将Apache ActiveMQ Artemis配置为使用数据库来保存消息和绑定数据,必须执行两件事。
请参阅有关添加运行时依赖项的文档,以了解如何使JDBC驱动程序对代理可用。
在broker.xml文件<core>元素下的配置文件。例如:
<store> <database-store> <jdbc-connection-url>jdbc:mysql://xxxx/monitodb?relaxAutoCommit=true</jdbc-connection-url> <jdbc-user>用户名</jdbc-user> <jdbc-password>密码</jdbc-password> <bindings-table-name>atmq_bind</bindings-table-name> <message-table-name>atmq_msg</message-table-name> <page-store-table-name>atmq_page</page-store-table-name> <large-message-table-name>atmq_large_msg</large-message-table-name> <node-manager-store-table-name>atmq_node_manager</node-manager-store-table-name> <jdbc-driver-class-name>com.mysql.jdbc.Driver</jdbc-driver-class-name> </database-store> </store>
jdbc-connection-url
数据库服务器的完整JDBC连接URL。连接url应该包含所有配置参数和数据库名称。注意:使用XML配置文件配置服务器时,请确保转义任何非法字符;例如,“&”在JDBC连接url中是典型的,应转义为“&”。
bindings-table-name
将为ActiveMQ Artemis服务器保留绑定数据的表的名称。指定表名允许用户在多个服务器之间共享单个数据库,而不受干扰。
message-table-name
将为ActiveMQ Artemis服务器保留绑定数据的表的名称。指定表名允许用户在多个服务器之间共享单个数据库,而不受干扰。
large-message-table-name
将为ActiveMQ Artemis服务器保留消息和相关数据的表的名称。指定表名允许用户在多个服务器之间共享单个数据库,而不受干扰。
page-store-table-name
存放页面存储目录信息的表的名称。请注意,每个地址都有自己的页表,该页表将使用此名称并附加一个最多20个字符的唯一id。
node-manager-store-table-name
将为ActiveMQ Artemis服务器保留HA共享存储锁定(即实时和备份)和HA相关数据的表的名称。指定表名允许用户在多个服务器之间共享单个数据库,而不受干扰。每个共享存储区实时/备份对必须使用相同的表名,并且不支持在多个(和不相关的)实时/备份对之间共享同一个表。
jdbc-driver-class-name
所需数据库驱动程序的完全限定类名。
jdbc-network-timeout
JDBC网络连接超时(毫秒)。默认值为20000毫秒(即20秒)。使用共享存储时,建议将其设置为小于或等于jdbc锁过期时间。
jdbc-lock-renew-period
JDBC锁的保持活动服务的周期(毫秒)。默认值为2000毫秒(即2秒)。
jdbc-lock-expiration
以毫秒为单位的JDBC锁被认为在不保持其活动状态下有效。默认值为20000毫秒(即20秒)。
jdbc-journal-sync-period
日志将与JDBC同步的时间(毫秒)。默认值为5毫秒。