我继承了一个系统,其中activemq地址看起来像这样scp://localhost:61616
ActiveMQ 本身似乎只配置为tcp
. 我在这里找不到对该协议的任何引用:http: //activemq.apache.org/activemq-connection-uris
有人见过这个吗?
我继承了一个系统,其中activemq地址看起来像这样scp://localhost:61616
ActiveMQ 本身似乎只配置为tcp
. 我在这里找不到对该协议的任何引用:http: //activemq.apache.org/activemq-connection-uris
有人见过这个吗?
在 ActiveMQ Artemis HA 集群 (v2.13.0) 中,<scale-down/>
如果主实例失败,HA 策略的属性会导致备份代理将所有未决消息移动到剩余的活动实例之一。一旦耗尽,从代理将自行停止并等待主实例再次上线。这种行为有效地减少了集群中代理对的数量,即使只有一个主代理失败。正确的?
未设置该<scale-down/>
属性时,从代理在主故障时变为活动,并且集群中的活动代理的数量不会改变。但是,我想知道如果故意关闭(即,SIGTERM
),实时备份实例是否仍将挂起的消息移动到其他代理。此行为将在代理有意关闭的情况下保留所有消息,同时在发生故障时保留活动代理的数量。
对于完全冗余的 ActiveMQ Artemis 集群,需要一组三个代理对或网络 ping以避免脑裂场景。在某些安装中,只有两个数据中心或可用区可用,外加一个小的第三个站点用于仲裁服务器。
是否可以将 Artemis 代理作为不实际处理工作负载的仅仲裁实例运行?
我们有一个物联网基础设施,设备通过 MQTT 进行通信。但是,现在我们还要求这些设备必须将传感器数据发布到一个队列中,以便云处理对其进行评估和存储。
由于 MQTT 不支持拉取模型,我目前正在研究可能使用的排队服务。ActiveMQ Artemis 引起了我的注意,因为它支持各种协议,其中包括 MQTT 和 REST 接口。
不过,我在文档中无法清楚地看到,Artemis 是否只能充当多个消息队列的单个代理,或者它是否实际上可以用于在它们之间进行转换。到目前为止的计划是让一个 MQTT 客户端订阅“处理”主题,该主题将收集发布给它的所有消息并将它们推入轮询队列,工作人员会来收集它们。似乎 Artemis 有可能在不运行其他服务的情况下做到这一点,但我完全不确定我是否正确解释了文档。
所以要问一个直截了当的问题:我可以安装 Artemis,以便我可以向它发布 MQTT 消息,然后从队列中轮询它们,例如使用 REST 接口吗?
根据“Learning Puppet 4”一书中的手册,我正在尝试使用 jorhett/puppet-mcollective 模块设置 MCollective。运行“mco ping”、“mco inventory node_name”等后出现以下错误。
警告 2016/08/11 07:21:19:activemq.rb:346:in `rescue in ssl_parameters' 无法设置完整的 SSL 验证模式,退回到未验证:RuntimeError:必须提供证书、密钥和 ca 以进行验证SSL 模式
这是我的配置:Hiera 主机名/puppetserver.yaml
# hostname/puppetserver.yaml
classes:
- mcollective::middleware
- mcollective::client
# Middleware configuration
mcollective::client_password: 'VpOS62qqpH3NEVEtP8rQsS2tpq6xwgOJEXsABjYDvoI='
mcollective::middleware::keystore_password: 'k7Dj+On3xGmQPX7CuCxgXaOFwHZFdKICeQQFpWlzg6E='
mcollective::middleware::truststore_password: 'k7Dj+On3xGmQPX7CuCxgXaOFwHZFdKICeQQFpWlzg6E='
Hiera common.yaml
---
puppet::status: 'running'
puppet::enabled: true
# every node installs the server
classes:
- mcollective::server
# The Puppet Server will host the middleware
mcollective::hosts:
- 'puppet.example.com'
mcollective::collectives:
- 'mcollective'
mcollective::connector: 'activemq'
mcollective::connector_ssl: true
mcollective::connector_ssl_type: 'anonymous'
# Access passwords
mcollective::server_password: 'h3Vh7JGGkyWxuehCvScXRwZmIZYRHtDDDxuS1W68XAQ='
mcollective::psk_key: 'y2Z2BzcsRFXCBidywQafyJoELH5bIkmZzXGssLLMVsw='
mcollective::facts::cronjob::run_every: 10
mcollective::server::package_ensure: 'latest'
mcollective::plugin::agents:
puppet:
version: 'latest'
mcollective::client::unix_group: vagrant
mcollective::client::package_ensure: 'latest'
mcollective::plugin::clients:
puppet:
version: 'latest'
集体服务器.cfg
# /etc/mcollective/server.cfg
libdir = /usr/libexec/mcollective
libdir = /opt/puppetlabs/mcollective/plugins
classesfile = /opt/puppetlabs/puppet/cache/state/classes.txt
daemonize = 1
direct_addressing = 1
main_collective = mcollective
collectives = mcollective
# ActiveMQ connector settings:
connector = activemq
plugin.activemq.heartbeat_interval = 30
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = puppet.example.com
plugin.activemq.pool.1.port = 61614
plugin.activemq.pool.1.user = server
plugin.activemq.pool.1.password = h3Vh7JGGkyWxuehCvScXRwZmIZYRHtDDDxuS1W68XAQ=
plugin.activemq.pool.1.ssl = true
plugin.activemq.pool.1.ssl.fallback = true
# Send these messages to keep the Stomp connection alive.
# This solves NAT and firewall timeout problems.
registerinterval = 600
# Security provider
securityprovider = psk
plugin.psk = y2Z2BzcsRFXCBidywQafyJoELH5bIkmZzXGssLLMVsw=
# Facts
factsource = yaml
plugin.yaml = /etc/puppetlabs/mcollective/facts.yaml
# Puppet resource control
plugin.puppet.resource_allow_managed_resources = true
plugin.puppet.resource_type_whitelist = none
# Logging
logger_type = syslog
loglevel = info
logfacility = user
Mcollective 客户端.cfg
# Connector
libdir = /usr/libexec/mcollective
libdir = /opt/puppetlabs/mcollective/plugins
direct_addressing = 1
main_collective = mcollective
collectives = mcollective
connector = activemq
plugin.activemq.heartbeat_interval = 30
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = puppet.example.com
plugin.activemq.pool.1.port = 61614
plugin.activemq.pool.1.user = client
plugin.activemq.pool.1.password = VpOS62qqpH3NEVEtP8rQsS2tpq6xwgOJEXsABjYDvoI=
plugin.activemq.pool.1.ssl = true
plugin.activemq.pool.1.ssl.fallback = true
# Security provider
securityprovider = psk
plugin.psk = y2Z2BzcsRFXCBidywQafyJoELH5bIkmZzXGssLLMVsw=
plugin.psk.callertype = uid
# Discovery
default_discovery_method = mc
direct_addressing_threshold = 10
default_discovery_options =
# Miscellaneous settings
color = 1
rpclimitmethod = first
# Performance settings
direct_addressing_threshold = 10
ttl = 60
# Logging
logger_type = console
loglevel = warn
我想在 amq 或机器重启后保存未使用的消息。此文档是否适用于 ActiveMQ 5.12.1 版本?我尝试使用文档中的示例并得到错误:
错误 | 加载失败:类路径资源 [activemq.xml],原因:来自类路径资源 [activemq.xml] 的 XML 文档中的第 86 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:86;列号:90;cvc-complex-type.2.4.a:发现以元素“kahaPersistenceAdapter”开头的无效内容。'{" http://activemq.apache.org/schema/core ":jdbcPersistenceAdapter、" http://activemq.apache.org/schema/core ":journalPersistenceAdapter、" http://activemq.apache.org之一/schema/core ":kahaDB, " http://activemq.apache.org/schema/core ":levelDB, " http://activemq.apache.org/schema/core ":mKahaDB, " http://activemq .apache。":memoryPersistenceAdapter, " http://activemq.apache.org/schema/core ":replicatedLevelDB, WC[##other:" http://activemq.apache.org/schema/core "]}' 是预期的。
几乎默认配置会发生此错误:https ://yadi.sk/d/e8tWyIzyk9piV
好吧,我将 kahaPersistenceAdapter 替换为 kahaDB 并重新启动。并得到错误:
属性“maxDataFileLength”不允许出现在元素“kahaDB”中。
我替换了这个属性并启动了 ActiveMQ。我将消息发送到队列,重新启动 amq 并且我未使用的消息消失了。我做错了什么?
目标
目前办公室里有 100 多个系统,预计这个数字会增加。所有系统都由 Puppet 管理。如果 Puppet Master 上的 Puppet 代码发生变化,需要在多个系统上实现,则 Puppet 通过sudo puppet agent -t
在每个系统上执行来手动运行。有时需要在 10 多个系统上实施更改。为了安全起见,我们的想法是使用 MCollective,即在所有系统上运行一次 puppet,而不是在每个系统上运行 puppet。
试图
Puppetmaster上已经安装了ActiveMQ、MCollective Server和MCollective Client。一旦运行,可以找到Puppetmaster 。安装MCollective Puppet Agent并运行Puppet后,将在Puppetmaster上运行。mco ping
mco rpc puppet runonce
为了连接远程 mcollective-client的想法是必须安装并运行activemq和mcollective-client才能通过发出mco ping
.
/var/log/mcollective.log
INFO -- : activemq.rb:114:in `on_connecting' TCP Connection attempt 23 to stomp://mcollective@stomp1:6163
/etc/activemq/activemq.xml
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/>
</transportConnectors>
</broker>
/etc/mcollective/server.cfg
connector = activemq
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = localhost
plugin.activemq.pool.1.port = 61613
plugin.activemq.pool.1.user = mcollective
plugin.activemq.pool.1.password = helloworld
其中一个假设是应该在 server.cfg 中配置多个主机。在尝试使其工作时,不清楚架构应该是什么样子。是否需要一个ActiveMQ、一个MCollective 服务器和多个MCollective 客户端(每个节点上一个)?
预期结果
预期的结果是mco ping
找到Puppetmaster和远程客户端。一旦这工作,就可以使用 MCollective 在两个系统上运行 Puppet。当可以使用 MCollective 在这两个系统上执行 Puppet 时,将添加多个节点,一旦mco rpc puppet runonce
执行,Puppet 将在这些系统上运行。
目前的结果
由于无法通过执行找到远程客户端,mco ping
因此无法使用 MCollective 在两个系统上运行 Puppet。
我们正在使用 ActiveMQ 5.6.0 和 KahaDB。它产生了相当多的日志文件,这是我们的设置(DLQ 和其他东西)所期望的,如下所示:
$ ll -h /opt/activemq/data/kahadb/
total 969M
drwxr-xr-x 2 root root 4.0K Nov 3 12:47 ./
drwxr-xr-x 3 activemq activemq 4.0K Sep 24 12:12 ../
-rw-r--r-- 1 root root 39M Oct 16 07:57 db-202.log
-rw-r--r-- 1 root root 38M Oct 16 07:57 db-203.log
-rw-r--r-- 1 root root 33M Oct 17 08:12 db-238.log
...
当我们遇到 1GB 的临时使用限制时,不再处理消息。或者这就是我们的假设,对吗?
配置如下所示:
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="512mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="3 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="1 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
在清理日志文件并低于限制后,AMQ 仍然没有消耗任何消息。只有当我们手动清除路由时,消息才会再次开始传递。
所以我们需要确保 KahaDB 日志大小始终保持在临时使用以下,对吗?并且在修复后没有收到交货,这是一个错误,还是需要采取任何其他步骤?
因此,我想使用 WCF 进行异步、断开连接的跨 Internet 消息传递。可能由于我在 Apache ActiveMQ 方面的背景,我正在为此寻找 MSMQ。
在 ActiveMQ 中,加密队列连接是一件简单的事情;您只需选择与代理的基于 SSL 的连接,并且您有一个基本的 SSL 层来保护代理和客户端之间的通信。(我应该考虑将 WCF 客户端与 ActiveMQ 代理一起使用吗?)
当我点击 Google 进行 MSMQ 加密和 MSMQ SSL 时,我没有找到任何类似的东西。希望我只是错过了什么?
我发现了一些关于加密消息的看起来很复杂的东西,关于使用 HTTPS 的东西,以及需要 Active Directory 的东西 - 但我希望保护所有的通信,而不仅仅是消息,我们不喜欢使用 HTTPS 作为绑定,因为我们需要断开连接的操作,并且我们将没有 Active Directory 可以使用。
最好的方法是什么?