Ubuntu 16.04 下通过 apt 安装 ActiveMQ

  • 更新系统软件包
sudo apt update 
sudo apt upgrade
  • 安装 jdk
sudo apt install default-jdk
  • 安装、启动 ActiveMQ
sudo apt install activemq
sudo systemctl start activemq
  • 查看
sudo systemctl status activemq
netstat -nl|grep 61616

说明:截止到2018-01-26 这种方式都还是有问题的【active (exited)】,已有人提交 bug report。

  • Web 管理页:http://127.0.0.1:8161/admin/

  • 服务状态说明

loaded              # 系统服务已经初始化完成,加载过配置
active(running)     # 正有一个或多个程序正在系统中执行,守护进程 activemq 就应该是这种模式
atcive(exited)      # 仅执行一次就正常结束的服务,如 iptables
atcive(waiting)     # 正在执行中,不过还再等待其他的事件才能继续处理
inactive            # 服务关闭
enbaled             # 服务开机启动
disabled            # 服务开机不自启
static              # 服务开机启动项不可被管理
failed              # 系统配置错误

ActiveMQ基于zookeeper的主从(levelDB Master/Slave)搭建

一、说明

ActiveMQ 5.9.0新推出的主从实现,基于zookeeper来选举出一个master,其他节点自动作为slave实时同步消息。因为有实时同步数据的slave的存在,master不用担心数据丢失,所以leveldb会优先采用内存存储消息,异步同步到磁盘,所以该方式的activeMQ读写性能最好因为选举机制要超过半数,所以最少需要3台节点,才能实现高可用。如果集群是两台则master失效后slave会不起作用,所以集群至少三台。此种方式仅实现主备功能,避免单点故障,没有负载均衡功能。

二、环境准备

IP
192.168.3.10    server1
192.168.3.11    server2
192.168.3.12 server3

安装软件信息:

apache-activemq-5.13.0-bin.tar.gz

zookeeper-3.5.2-alpha.tar.gz

ZooInspector.zip

三、搭建Zookeeper集群

1、将zookeeper-3.5.2-alpha.tar.gz文件解压到/home/wzh/zk目录;

2、将zoo_sample.cfg复制一份为 zoo.cfg,并修改其配置信息

wzh@hd-master:~/zk/zookeeper-3.5.2-alpha/conf$ cp zoo_sample.cfg zoo.cfg

wzh@hd-master:~/zk/zookeeper-3.5.2-alpha/conf$vim zoo.cfg
tickTime=2000

initLimit=10

syncLimit=5

dataDir=/tmp/zookeeper

clientPort=2181



server.1=192.168.3.10:2888:3888

server.2=192.168.3.11:2888:3888

server.3=192.168.3.11:2888:3888

3、创建/tmp/zookeeper目录

在该目录下创建名为myid的文件,内容为1(这个值随server而改变)

4、将server1上的/home/wzh/zk/zookeeper-3.5.2-alpha文件夹复制到server2,server3,然后创建/tmp/zookeeper目录

在该目录下创建名为myid的文件,内容为2

5、启动zookeeper

[192.168.3.10]

wzh@hd-master:~/zk/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /home/wzh/zk/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[192.168.3.11]

wzh@hd-slave1:~/zk/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /home/wzh/zk/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[192.168.3.12]

wzh@hd-slave2:~/zk/zookeeper-3.5.2-alpha/bin$ ./zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /home/wzh/zk/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

四、搭建ActiveMQ集群

1、将apache-activemq-5.13.0-bin.tar.gz解压到/home/wzh/amq

2、修改activemq.xml配置文件

  • 将broker节点的brokerName设置为wzhamq
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="wzhamq" dataDirectory="${activemq.data}">
  • 将persistenceAdapter的持久化方式选用replicatedLevelDB,将kahaDB方式注释掉
 <persistenceAdapter>
         <!--
            <kahaDB directory="${activemq.data}/kahadb"/>
         -->
        <replicatedLevelDB 
                directory="${activemq.data}/leveldb" 
                replicas="3" 
                bind="tcp://0.0.0.0:0"        
                zkAddress="192.168.3.10:2181,192.168.3.11:2181"     
                hostname="192.168.3.10"          
                sync="local_disk"          
                zkPath="/activemq/leveldb-stores"/>
        </persistenceAdapter>
  • 将apache-activemq-5.13.复制到11,12机器
wzh@hd-master:~/amq$ scp -r apache-activemq-5.13.0/ [email protected]:/tmp
  • 修改配置文件中的hostname=”192.168.3.11″

  • 修改配置文件中的hostname=”192.168.3.12″

3、启动ActiveMQ

wzh@hd-master:~/amq$ ./apache-activemq-5.13.0/bin/activemq status
INFO: Loading '/home/wzh/amq/apache-activemq-5.13.0//bin/env'
INFO: Using java '/opt/java/jdk1.8.0_91/bin/java'
ActiveMQ is running (pid '2031')
wzh@hd-master:~/amq$

依次启动192.168.3.11,192.168.3.12机器

五、集群管理

1、通过使用ZooInspector工具查看zookeeper集群情况

2、http://192.168.3.10:8161/admin/ 默认用户名与口令为admin登录ActiveMQ管理端

未分类

六、通过Spring-boot操作ActiveMQ JMS

1、通过gradle构建Spring-boot应用,在 gradle文件中增加

dependencies {
    compile('org.springframework.boot:spring-boot-starter-activemq')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

2、application中增加以下配置

spring.activemq.broker-url=failover:(tcp://192.168.3.10:61616,tcp://192.168.3.11:61616,tcp://192.168.3.12:61616)
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
spring.activemq.user=admin
spring.activemq.password=admin

3、JMS消息发送

@Service
public class Producer {

    @Autowired
    private JmsMessagingTemplate jmsTemplate;

    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
    }
}

4、JMS消息接收

@Component
public class Consumer {
    @JmsListener(destination = "test.queue")
    public void receiveQueue(String text){

        System.out.println("Consumer收到的报文为:"+text);
    }
}

5、测试

@RestController
@RequestMapping(
        value = "/test",
        headers = "Accept=application/json",
        produces = "application/json;charset=utf-8"
)
public class TestCtrl {
    @Autowired
    Producer producer;

    Destination destination = new ActiveMQQueue("test.queue");

    @RequestMapping(
            value = "/say/{msg}/to/{name}",
            method = RequestMethod.GET
    )
    public Map<String, Object> say(@PathVariable String msg, @PathVariable String name){
        Map<String, Object> map = new HashMap<>();
        map.put("msg", msg);
        map.put("name", name);

        producer.sendMessage(destination, msg);

        return map;
    }
}

6、进入ActiveMQ管理控制台创建一个消息队列

test.queue

7、通过POSTMAN进行测试

2017-08-03 08:10:44.928 INFO 12820 --- [ActiveMQ Task-3] o.a.a.t.failover.FailoverTransport : Successfully reconnected to tcp://192.168.3.10:61616
2017-08-03 08:11:08.854 INFO 12820 --- [ActiveMQ Task-1] o.a.a.t.failover.FailoverTransport : Successfully connected to tcp://192.168.3.10:61616
Consumer收到的报文为:hello
2017-08-03 08:43:39.464 INFO 12820 --- [ActiveMQ Task-1] o.a.a.t.failover.FailoverTransport : Successfully connected to tcp://192.168.3.10:61616
Consumer收到的报文为:hello

8、目前系统连接的是10,如果此时将10集群Down掉,系统会理解选择一台slave作为master提供服务,从而启动案例主备的效果。

CentOS 7系统安装配置Apache ActiveMQ

Apache ActiveMQ是一个免费的开源消息代理和集成模式服务器。 它支持许多来自JAVA,C ++,C,Python,Perl,PHP等的跨语言客户端和协议。它提供了许多功能,如消息组,虚拟目的地,通配符和复合目的地等。它可以轻松集成到弹簧应用程序。

在本教程中,我们将在CentOS 7服务器上安装Apache ActiveMQ。

条件

  • 最小CentOS 7服务器
  • 根权限 本指南以root用户身份编写,如果以sudo用户身份登录,请运行sudo -i 。

更新基本系统

在安装任何软件包之前,建议您使用以下命令更新软件包和存储库。

yum -y update

更新系统后,继续安装JAVA。

安装JAVA

ActiveMQ支持OpenJDK和Oracle JAVA,在本教程中,我们将安装最新版本的Oracle Java到服务器。 运行以下命令下载RPM包。

wget –no-cookies –no-check-certificate –header “Cookie:oraclelicense=accept-securebackup-cookie” “http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm”

如果没有安装wget ,可以运行yum -y install wget来安装wget。 现在使用以下命令安装下载的RPM。

yum -y localinstall jdk-8u131-linux-x64.rpm

现在可以使用以下命令检查Java版本。

java -version

您将得到以下输出。

[root@liptan-pc ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

您还需要检查是否设置了JAVA_HOME环境变量。 运行以下命令相同。

echo $JAVA_HOME

如果获得空或空白输出,则需要手动设置JAVA_HOME变量。 使用您喜欢的编辑器编辑.bash_profile文件。 在本教程中,我们将使用nano编辑器。 运行以下命令使用nano编辑.bash_profile 。

nano ~/.bash_profile

现在在文件的末尾添加以下行。

export JAVA_HOME=/usr/java/jdk1.8.0_131/
export JRE_HOME=/usr/java/jdk1.8.0_131/jre

现在使用以下命令来源文件。

source ~/.bash_profile

现在可以再次运行echo $ JAVA_HOME命令来检查环境变量是否设置。

[root@pc ~]# echo $JAVA_HOME 
/usr/java/jdk1.8.0_131/

安装ActiveMQ

ActiveMQ为预编译并可直接使用的Unix系统提供二进制文件。 唯一必需的依赖是将JAVA安装到系统中。 我们已经安装了JAVA,我们可以进一步下载ActiveMQ。

wget http://www-eu.apache.org/dist//activemq/5.15.0/apache-activemq-5.15.0-bin.tar.gz

如果你没有安装wget ,可以运行yum -y install wget 。 您可以随时在ActiveMQ下载页面上找到最新版本的链接。

使用以下命令提取存档。

tar -zxvf apache-activemq-*-bin.tar.gz -C /var

为了简单起见,通过运行来更改ActiveMQ目录的名称。

mv /var/apache-activemq-*/ /var/activemq/

ActiveMQ现在安装在您的系统上。

启动ActiveMQ

将当前目录更改为ActiveMQ安装目录。

cd /var/activemq

您可以通过运行以下命令立即启动ActiveMQ作为前台进程。

./bin/activemq console

要启动ActiveMQ作为后台进程,请运行:

./bin/activemq start

如果启动成功,您应该得到以下输出。

[root@pc activemq]# ./bin/activemq start
INFO: Loading '/var/activemq//bin/env'
INFO: Using java '/usr/java/jdk1.8.0_131//bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/var/activemq//data/activemq.pid' (pid '27680')

要停止ActiveMQ,可以运行以下命令。

./bin/activemq stop

创建Systemd服务

虽然您可以使用上述命令轻松运行ActiveMQ,但建议您使用systemd服务来管理ActiveMQ进程。 使用Systemd服务将确保ActiveMQ将在启动时自动启动和失败。

使用您喜欢的文本编辑器创建一个systemd服务文件。 在本教程中,我们将使用nano编辑器。 如果没有安装nano ,可以运行yum -y安装nano 。

nano /etc/systemd/system/activemq.service

现在使用以下内容填充该文件。

[Unit]
Description=ActiveMQ service
After=network.target

[Service]
Type=forking
ExecStart=/var/activemq/bin/activemq start
ExecStop=/var/activemq/bin/activemq stop
User=root
Group=root
Restart=always
RestartSec=9
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=activemq

[Install]
WantedBy=multi-user.target

现在您可以使用以下方式启动ActiveMQ:

systemctl start activemq

要配置ActiveMQ在启动时自动启动,请使用。

systemctl enable activemq

要检查ActiveMQ服务是否正确启动,可以运行以下命令来检查ActiveMQ服务的状态。

systemctl status activemq

您应该得到类似于以下所示的输出。

? activemq.service - ActiveMQ service
   Loaded: loaded (/etc/systemd/system/activemq.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-07-15 17:05:24 UTC; 6s ago
  Process: 28815 ExecStart=/var/activemq/bin/activemq start (code=exited, status=0/SUCCESS)
 Main PID: 28867 (java)
   CGroup: /system.slice/activemq.service
           ??28867 /usr/bin/java -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth...

Jul 15 17:05:24 centos systemd[1]: Starting ActiveMQ service...
Jul 15 17:05:24 centos activemq[28815]: INFO: Loading '/var/activemq//bin/env'
Jul 15 17:05:24 centos activemq[28815]: INFO: Using java '/usr/bin/java'
Jul 15 17:05:24 centos activemq[28815]: INFO: Starting - inspect logfiles specified in logging.propertie...tails
Jul 15 17:05:24 centos activemq[28815]: INFO: pidfile created : '/var/activemq//data/activemq.pid' (pid '28867')
Jul 15 17:05:24 centos systemd[1]: Started ActiveMQ service.

使用管理Web面板

要访问ActiveMQ的管理面板,请启动ActiveMQ服务。 使用您最喜爱的Web浏览器,打开以下URL。

http://Your_Server_IP:8161/admin

如果您已安装防火墙 ,则必须允许端口8161通过防火墙。 运行以下命令相同。

firewall-cmd –zone=public –permanent –add-port=8161/tcp
firewall-cmd –reload

Apache ActiveMQ的初始用户名和密码是admin和admin 。

您应该在登录后立即更改密码。

结论

您现在可以使用Apache ActiveMQ服务器来管理多个客户端和服务器之间的通信。 您可以通过访问ActiveMQ站点了解有关Apache ActiveMQ的更多信息。