如何将日志从 ActiveMQ Artemis 1.5.6 迁移到 2.7.0?

托马斯

我想将我的(嵌入式)ActiveMQ Artemis 从 1.5.6 迁移到 2.7.0,但在开始时我收到关于日志不兼容的错误。

2019-05-09 17:10:08,762 main            org.apache.activemq.artemis.core.server  ERROR AMQ224000: Failure in initialisation
java.lang.IllegalStateException: This is using old journal data, export your data and import at the correct version
        at org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.loadMessageJournal(AbstractJournalStorageManager.java:912)
        at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.loadJournals(ActiveMQServerImpl.java:2980)
        at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart2(ActiveMQServerImpl.java:2690)
        at org.apache.activemq.artemis.core.server.impl.LiveOnlyActivation.run(LiveOnlyActivation.java:72)
        at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:564)
        at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:501)
        at org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl.start(JMSServerManagerImpl.java:376)
        at org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS.start(EmbeddedJMS.java:131)

如何在不丢失数据的情况下迁移消息?

我发现了引入新格式(https://issues.apache.org/jira/browse/ARTEMIS-1009的更改,但我没有找到有关如何迁移或如何使用旧格式的信息。

2.7.0服务器我是这样启动的:

Configuration configuration = new ConfigurationImpl();
configuration.setJMXManagementEnabled(false);

configuration.setPersistenceEnabled(true);
configuration.setBindingsDirectory(persistenceLocation + "bindings");
configuration.setJournalDirectory(persistenceLocation + "journal");
configuration.setPagingDirectory(persistenceLocation + "paging");
configuration.setLargeMessagesDirectory(persistenceLocation + "largemessages");

configuration.addAddressesSetting("#", new AddressSettings().setAutoCreateJmsQueues(false).setAutoDeleteJmsQueues(false));
configuration.addAcceptorConfiguration("in-vm", "vm://0");
configuration.addAcceptorConfiguration("tcp","tcp://" +host+  ":" + port + "?anycastPrefix=jms.queue.");

configuration.setSecurityEnabled(true);
Set<Role> roles = new HashSet<>();
roles.add(new Role(PRODUCER, true, false, false, false, false, false, false, false, false, false));
roles.add(new Role(CONSUMER, false, true, false, false, false, false, false, false, false, false));
configuration.putSecurityRoles("#", roles);

JMSQueueConfigurationImpl queueConfig = new JMSQueueConfigurationImpl();
queueConfig.setDurable(true);
queueConfig.setName("Provisioning");

JMSConfiguration jmsConfig = new JMSConfigurationImpl();
jmsConfig.getQueueConfigurations().add(queueConfig);

SecurityConfiguration securityConfiguration = new SecurityConfiguration();
securityConfiguration.addUser(user, password);
securityConfiguration.addRole(user, PRODUCER);
securityConfiguration.addRole(user, CONSUMER);
securityConfiguration.setDefaultUser(user);

ActiveMQSecurityManager securityManager = new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(),
                        securityConfiguration);
// Start server
EmbeddedJMS server = new EmbeddedJMS();
server.setJmsConfiguration(jmsConfiguration);
server.setConfiguration(configuration);
server.setSecurityManager(securityManager);
server.start()
贾斯汀伯特伦

您可以使用 Artemisdata工具导出和导入您的日志。

  1. 导航到bin您的 Artemis 1.5.6 实例目录。
  2. 导出日志数据: ./artemis data exp > /tmp/export.xml
  3. 导航到bin您的 Artemis 2.7.0 实例目录。
  4. 启动代理: ./artemis run
  5. 1.5.6 导入日志数据: ./artemis data imp --input /tmp/export.xml

导入需要一个正在运行的代理,默认情况下它将尝试连接到localhost:61616. 但是,如有必要,您可以使用--host--port开关来更改它。

如果您更愿意直接使用底层 Java 而不是命令行工具,您可以执行以下操作来导出:

import java.io.ByteArrayOutputStream;
import org.apache.activemq.artemis.cli.commands.tools.xml.XmlDataExporter;
...
ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream();
XmlDataExporter xmlDataExporter = new XmlDataExporter();
xmlDataExporter.process(xmlOutputStream, "BindingsDirectory", "JournalDirectory", "PagingDirectory", "LargeMessagesDirectory");
System.out.print(new String(xmlOutputStream.toByteArray()));

这需要由您要导出的日志的本机版本运行,例如,如果您想从 1.5.6 版导出日志,那么这些类必须来自 1.5.6 jars,因为这是可以的版本正确阅读期刊。

要导入,您可以运行以下命令:

import java.io.ByteArrayInputStream;
import org.apache.activemq.artemis.cli.commands.tools.xml.XmlDataImporter;
...
ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray());
XmlDataImporter xmlDataImporter = new XmlDataImporter();
xmlDataImporter.validate(xmlInputStream);
xmlInputStream.reset();
xmlDataImporter.process(xmlInputStream, session);

此处session指向要导入数据的代理实例。

您可以在ActiveMQ Artemis 测试套件中看到许多此类工作示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 Google Endpoint V1 迁移到 V2,将 Java 7 迁移到 Java 8

如何将 Room db 从 1 迁移到 2?

ActiveMQ 5.x 到 Artemis 的迁移方法

将数组的元素添加为a [0],a [1] + a [2],a [3] + a [4] + a [5],a [6] + a [7] + a [8] + a [9] ...等等

将 Webpack 从版本 1 迁移到 2

Artemis 与 Activemq 5 消息存储

如何将Elasticsearch 1.x重新索引或迁移到5.x数据

ActiveMQ Artemis转移日志记录

如何将Ubuntu安装从LVM2迁移到RAID5?

我如何设计一个以1开始并以0(1,2,3,4,5,6,7,8,9,0)结束的int循环

C中{0,1,2,3,4,5,6,7,8,9}外的条件

如何将 netflix zuul 1 迁移到 zuul 2 或 spring 云网关

如何将Microsoft.OneDriveSDK v1迁移到v2?

将Struts 1标签迁移到Struts 2

将 koa v1 迁移到 v2

将方法 RxJava1 迁移到 RxJava2

从RXJS 5迁移到6-IntervalObservable

如何将Angular 2 RC 1(或更早版本)表单迁移到Angular 2 RC 2 / RC 4新表单

我想把数组 [1,2,3,4,5,6,7,8,9,10,11] 变成数组 [1,2,3,4,5,6,7,8,9,1 ,0,1,1] 仅使用此算法

R:如何制作序列(1,1,1,2,3,3,3,4,5,5,5,6,7,7,7,8)

這是一個關於碼商的 mq 問題。我試過 [3 0 5 2 7] ,[2 1 4 3 6], [1 2 3 4 5]

如何将 toasts 从 bootstrap 4 迁移到 5?

重新排列 PHP 数组,将 1、2、3、4、5、6、7、8、9 重新排序为 1、4、7、2、5、8、3、6、9

Apache ActiveMQ Artemis 日志记录解释

如何重复序列:r中的1,2,3,4,5,6,1,2,3,4,5,6,7,8,9,10,7,8,9,10

将地图功能从rxjs5迁移到rxjs6

将ASP.NET MVC 5绑定“版本”迁移到MVC 6

将es5迁移到es6导出默认值

如何将带有complete = false的缺少的注入从Dagger 1迁移到Dagger 2