第15章 Docker 中 ActiveMQ 的安装与配置
文章目录
前言
-
为什么要使用 ActiveMQ?
Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调。
-
什么是 ActiveMQ?
Apache ActiveMQ是Apache Software Foundation的一个软件项目,为大型分布式系统提供开源分布式配置服务,同步服务和命名注册表。 ZooKeeper是Hadoop的一个子项目,但现在它本身就是一个顶级项目。
ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。
Learn more about ZooKeeper on the ZooKeeper Wiki.
-
什么是 Docker?
具体请参考我的第08章内容。
-
为什么要在 Docker 中安装 Jenkins?
为了开发环境一致性、可移植性、易于管理和维护性。
目标
- 完成 Jenkins 在 Docker 中的安装与配置。
- 安装在 Docker 中的 Jenkins 能正常对外提供服务。
- 在外部开发环境中能正常访问和使用 Jenkins 持续集成服务。
环境
- **VMware:**VMware Workstation 14 Pro
- **Linux:**CentOS7.4
- **Docker:**18.06.0-ce, build 0ffa825
- **Jenkins:**Jenkins2.121.1
- **JDK:**jdk1.8.0_172
- **ActiveMQ:**5.15.2
介绍
Dockerfile用于构建ActiveMQ容器映像。
Apache ActiveMQ™是最受欢迎和功能最强大的开源消息传递和Integration Patterns服务器。 Apache ActiveMQ速度快,支持许多跨语言客户端和协议,具有易于使用的企业集成模式和许多高级功能,同时完全支持JMS 1.1和J2EE 1.4。 Apache ActiveMQ是在Apache 2.0许可下发布的 。
特性(Features)
-
支持Java,C,C ++,C#,Ruby,Perl,Python,PHP等各种跨语言客户端和协议
- 适用于Java,C,C ++,C#的高性能客户端的OpenWire
- Stomp支持,以便客户端可以轻松地用C,Ruby,Perl,Python,PHP,ActionScript / Flash,Smalltalk编写,以便与ActiveMQ以及任何其他流行的Message Broker交谈
- AMQP v1.0支持
- MQTT v3.1支持允许在物联网环境中进行连接
-
完全支持JMS客户端和Message Broker中的企业集成模式
-
支持许多高级功能,如消息组,虚拟目标,通配符和复合目标
-
完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息传递
-
Spring支持,以便ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
-
在流行的J2EE服务器中测试,如TomEE,Geronimo,JBoss,GlassFish和WebLogic
- 包括用于入站和出站消息传递的JCA 1.5资源适配器,以便ActiveMQ可以在任何符合J2EE 1.4的服务器中自动部署
-
支持可插拔传输协议,如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输
-
使用JDBC和高性能日志支持非常快速的持久性
-
专为高性能群集,客户端 - 服务器,基于对等的通信而设计
-
REST API,为消息传递提供技术不可知和基于语言的基于Web的API
-
Ajax支持使用纯DHTML对Web浏览器的Web流支持,允许Web浏览器成为消息传递结构的一部分
-
CXF和Axis支持,以便可以轻松地将ActiveMQ放入这些Web服务堆栈中,以提供可靠的消息传递
-
可以用作内存中的JMS提供程序,非常适合单元测试JMS
版本
当前版本:5.15.2
硬件要求
中央处理器(CPU)
没有统计数据可以说明消息功能的核心数量
内存(Memory)
512MB的内存太少,我认为是在测试环境中使用ActiveMQ 1GB是标准内存大小 您可以设置所需的内存:
$ sudo docker run --name='activemq' -it --rm \
-e 'ACTIVEMQ_CONFIG_MINMEMORY=512' \
-e 'ACTIVEMQ_CONFIG_MAXMEMORY=2048'\
-P
webcenter/activemq:latest
这个样本lauch ActiveMQ在docker中有512 MB的内存,然后ACtiveMQ可以占用2048 MB的最大内存。
存储(Storage)
必要的硬盘空间取决于您是否使用持久性消息和appender的类型。 Normaly,不需要ActiveMQ的空间,因为大多数数据都直接包含在内存中。 我认为这取决于你如何使用ActiveMQ;)
安装(Installation)
从docker索引中提取镜像。这是推荐的安装方法,因为它更容易更新镜像。这些构建由Docker Trusted Build服务执行。
$ sudo docker pull webcenter/activemq:5.15.2
您还可以提取从存储库HEAD构建的latest
标记
$ sudo docker pull webcenter/activemq:latest
或者,您可以在本地构建镜像。
git clone https://github.com/disaster37/activemq.git
cd activemq
docker build --tag="$USER/activemq" .
快速开始(Quick Start)
您可以使用docker命令行启动映像:
-
用于测试目的(For test purpose) :
$ sudo docker run --name='activemq' -it --rm -P \ webcenter/activemq:latest
帐户管理员为“admin”,密码为“admin”。所有设置都是默认的ActiveMQ设置。
-
用于生产目的(For production purpose) :
$ sudo docker run --name='activemq' -d \ -e 'ACTIVEMQ_CONFIG_NAME=amqp-srv1' \ -e 'ACTIVEMQ_CONFIG_DEFAULTACCOUNT=false' \ -e 'ACTIVEMQ_ADMIN_LOGIN=admin' -e 'ACTIVEMQ_ADMIN_PASSWORD=your_password' \ -e 'ACTIVEMQ_USERS_myproducer=producerpassword' -e 'ACTIVEMQ_GROUPS_writes=myproducer' \ -e 'ACTIVEMQ_USERS_myconsumer=consumerpassword' -e 'ACTIVEMQ_GROUPS_reads=myconsumer' \ -e 'ACTIVEMQ_JMX_user1_role=readwrite' -e 'ACTIVEMQ_JMX_user1_password=jmx_password' \ -e 'ACTIVEMQ_JMX_user2_role=read' -e 'ACTIVEMQ_JMX_user2_password=jmx2_password' -e 'ACTIVEMQ_CONFIG_TOPICS_topic1=mytopic1' -e 'ACTIVEMQ_CONFIG_TOPICS_topic2=mytopic2' \ -e 'ACTIVEMQ_CONFIG_QUEUES_queue1=myqueue1' -e 'ACTIVEMQ_CONFIG_QUEUES_queue2=myqueue2' \ -e 'ACTIVEMQ_CONFIG_MINMEMORY=1024' -e 'ACTIVEMQ_CONFIG_MAXMEMORY=4096' \ -e 'ACTIVEMQ_CONFIG_SCHEDULERENABLED=true' \ -v /data/activemq:/data \ -v /var/log/activemq:/var/log/activemq \ -p 8161:8161 \ -p 61616:61616 \ -p 61613:61613 \ webcenter/activemq:5.14.3
或者你可以使用 docker-compose。假设你安装了docker-compose,
wget https://raw.githubusercontent.com/disaster37/activemq/master/docker-compose.yml
docker-compose up
配置(Configuration)
访问
普通用户(Regular users)
您可以使用以下变量来创建常规用户:
+ACTIVEMQ_ACTIVEMQ_USERS_X
: 其中X是用户名,值是密码。ACTIVEMQ_GROUPS_Y
: 其中Y是组名,值是用户列表,以逗号分隔
您可以使用以下组来放置主题或队列:
writes
:可以读写所有主题和队列reads
:可以读所有主题和队列owners
: 可以读,写和拥有所有主题和队列
管理员用户(Admin user)
或者要创建管理员,您可以使用:
ACTIVEMQ_ADMIN_LOGIN
: 管理员登录ACTIVEMQ_ADMIN_PASSWORD
: 管理员密码
禁用默认帐户
您可以使用以下命令禁用默认帐户:
ACTIVEMQ_CONFIG_DEFAULTACCOUNT
: false表示禁用默认帐户。
队列(QUEUE)
您可以使用以下变量创建静态队列:
ACTIVEMQ_CONFIG_QUEUES_X
:其中X是没有特殊字符的逻辑名称,值是真实的队列名称。
主题(TOPIC)
您可以使用以下变量创建静态主题:
- 您可以使用以下变量创建静态主题:其中X是没有特殊字符的逻辑名称,值是真实的主题名称。
数据存储(Data Store)
暂时,您无法更改数据存储。这是kahadb。 数据存储在/data
上。
代理(BROKER)
TODO
磁盘使用情况(Disk usage)
您可以使用以下变量来限制磁盘使用情况:
ACTIVEMQ_CONFIG_STOREUSAGE
: 存储使用限制。默认值为100 GBACTIVEMQ_CONFIG_TEMPUSAGE
:临时使用限制。默认值为50 GB
JMX
您可以使用以下变量控制JMX访问:
ACTIVEMQ_JMX_X_ROLE
: 其中X是用户名,值是角色(读取或读写)ACTIVEMQ_JMX_X_PASSWORD
:其中X是用户名,值是密码
可用的配置参数(Avaible Configuration Parameters)
请参阅docker run命令选项以获取–env-file标志,您可以在其中指定单个文件中的所有必需环境变量。这将使您免于编写可能很长的docker run命令。或者你可以使用docker-compose。
Confd
ActiveMQ设置由Confd管理。所以你可以自定义它:
- CONFD_BACKEND: 您应该使用的Confd后端。默认为
env
。 - CONFD_NODES:用于联系后端的Confd URL数组。没有默认值。
- CONFD_PREFIX_KEY: Confd前缀键。默认为
/activemq
ActiveMQ参数
以下是可用于自定义activemq安装的可用选项的完整列表。
- ACTIVEMQ_CONFIG_NAME: The hostname of ActiveMQ server. Default to
localhost
- ACTIVEMQ_LOGGER_LOGLEVEL: The log level. Default to
INFO
- ACTIVEMQ_CONFIG_PENDINGMESSAGELIMIT: It is used to prevent slow topic consumers to block producers and affect other consumers by limiting the number of messages that are retained. Default to
1000
- ACTIVEMQ_CONFIG_STORAGEUSAGE: The maximum amount of space storage the broker will use before disabling caching and/or slowing down producers. Default to
100 gb
- ACTIVEMQ_CONFIG_TEMPUSAGE: The maximum amount of space temp the broker will use before disabling caching and/or slowing down producers. Default to
50 gb
- ACTIVEMQ_CONFIG_MAXCONNECTION: It’s DOS protection. It limit concurrent connections. Default to
1000
- ACTIVEMQ_CONFIG_FRAMESIZE: It’s DOS protection. It limit the frame size. Default to
104857600
(100MB) - ACTIVEMQ_CONFIG_SCHEDULERENABLED: Permit to enabled scheduler in ActiveMQ. Default to
true
- ACTIVEMQ_CONFIG_AUTHENABLED: Permit to enabled the authentification in queue and topic (no anonymous access). Default to
false
- ACTIVEMQ_CONFIG_MINMEMORY: The init memory in MB that ActiveMQ take when start (it’s like XMS). Default to
128
(128 MB) - ACTIVEMQ_CONFIG_MAXMEMORY: The max memory in MB that ActiveMQ can take (it’s like XMX). Default to
1024
(1024 MB) - ACTIVEMQ_DEFAULTACCOUNT: It’s permit to remove all default login on ActiveMQ (Webconsole, broker and JMX). Default to
true
- ACTIVEMQ_ADMIN_LOGIN: The login for admin account (broker and web console). Default to
admin
- ACTIVEMQ_ADMIN_PASSWORD: The password for admin account. Default to
admin
- ACTIVEMQ_USERS_X: Where X is the username and password is the value.
- ACTIVEMQ_GROUPS_X: Where X is the group and list user separated by a comma is the value.
- ACTIVEMQ_JMX_X_ROLE: Where X is the username and role is the value.
- ACTIVEMQ_JMX_X_PASSWORD: Where X is the username and password is the value.
- ACTIVEMQ_CONFIG_TOPICS_X: Where X is the logical topics name (wihtout special char) and real topic name is the value.
- ACTIVEMQ_CONFIG_QUEUES_X: Where X is the logical queue name (wihtout special char) and real queue name is the value.
高级配置(Advance configuration)
对于高级配置,最好的方法是阅读ActiveMQ文档并创建自己的设置文件,如activemq.xml。
接下来,您可以在运行此映像时安装它,也可以创建自己的映像(基于此映像)并包含您的特定配置文件。
ActiveMQ的主目录在/opt/activemq
中,因此如果要覆盖所有设置,可以使用-v /your_path/conf:/opt/activemq/conf
启动docker。
ecial char) and real queue name is the value.
高级配置(Advance configuration)
对于高级配置,最好的方法是阅读ActiveMQ文档并创建自己的设置文件,如activemq.xml。
接下来,您可以在运行此映像时安装它,也可以创建自己的映像(基于此映像)并包含您的特定配置文件。
ActiveMQ的主目录在/opt/activemq
中,因此如果要覆盖所有设置,可以使用-v /your_path/conf:/opt/activemq/conf
启动docker。
如果您重载配置,请不要忘记禁用confd或更改模板而不是更改activemq config /opt/confd /etc/templates
。