一.安装Erlang和RabbitMQ:
1. 安装erlang
安装erlang依赖 yum -y install gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
下载压缩包:http://erlang.org/download/otp_src_23.2.tar.gz
解压:tar -zxvf otp_src_23.2.tar.gz
安装:
cd otp_src_23.2/
./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
make && make install
等待安装完成后,添加erlang的环境变量:
vim /etc/profile
export ERLANG_HOME=/usr/local/erlang
export PATH=${ERLANG_HOME}/bin
wq
source /etc/profile
验证是否安装erlang成功:
2. 安装rabbitMQ
下载:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.9,找到rabbitmq-server-generic-unix-3.8.9.tar.xz
的下载包
解压:
xz -d rabbitmq-server-generic-unix-3.8.9.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.8.9.tar
安装rabbitMQ web管理界面 ./rabbitmq-plugins enable rabbitmq_management
启动rabbitMQ:./rabbitmq-server -detached
查看端口,查看15672,5672,端口是否已被监听。防火墙开放这两个端口,25672这个端口现在因为是单机服务无需开启。
访问:服务器ip/15627
安装到这一步算是完成了。
二.账号设置
在RabbitMQ登录界面,用guest/guest登录不成功,这是因为,guest只能在访问ip是127.0.0.1:15617的时候才能登录。那么需要添加能在外网登录的用户名和密码。
1.添加用户:./rabbitmqctl add_user 账号 密码
2.设置新用户的身份:./rabbitmqctl set_user_tags admin administrator
3.查看用户列表:./rabbitmqctl list_users
4.修改新用户的权限:./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
也可以不用命令修改,到第三部设置完成之后,已经能登录到RabbitMQ的web界面了,这个命令对应修改的是:
三.连接测试。
spring boot 下的demo:
1.pom.xml添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.application.yml添加对rabbitMQ的配置,然后启动springboot 项目
rabbitmq:
host: 127.0.0.1
username: admin
password: admin
port: 5672
virtual-host: /
3.新建一个RabbitMQConfig的配置类,新建一个名为Hello的队列(Queue)
@Configuration
public class RabbitConfig {
@Bean
public Queue queue_hello() {
return new Queue("hello");
}
}
查看打印控制台中发现没有提示任何连接RabbitMQ的信息:
再去RabbitMQ的后台管理界面查看
Connetions中也没有提示信息!是不是没有连接上!此时需要尝试发送一条信息来验证是否连接成功。
@Component
public class HelloSender {
@Autowired
private AmqpTemplate amqpTemplate;
public void send(String msg) {
String context = "自定义消息:" + msg + "---------------" + new Date();
amqpTemplate.convertAndSend("hello", context);
}
}
再新建一个测试类:
@SpringBootTest
@RunWith(SpringRunner.class)
class HelloSenderTest {
@Autowired
private HelloSender helloSender;
@Test
void send() {
helloSender.send();
}
}
会发现此时才新建一个RabbitMQ的连接。
此时就是已经在hello队列中写入了一条数据,说明配置是正确的。
4.添加消费者
@Component
@RabbitListener(queues = "hello")
public class HelloReceiver1 {
@RabbitHandler
public void process(String message) throws InterruptedException {
System.out.println("------------ hello1 接收到消息 -----------" + message);
Thread.sleep(10000);
}
}
添加了消费者之后发现,项目启动的时候就已经会同时生成一个RabbitMQ的连接,和只有生产者的时候是不一样的。
在RabbitMQ控制台中也能看到连接信息了。
猜想:
RabbitMQ中,有消费者则是在项目启动的时候已经连接上RabbitMQ,是长链接,只有在项目关闭的时候才断开。只有生产者的时候,只有调用了生产者类才会链接到RabbitMQ,发送完之后就销毁链接。(这样设计是为了节省资源吗?)
回顾一下RabbitMQ的一些命令:
1.添加用户:./rabbitmqctl add_user 账号 密码
2.设置新用户的身份:./rabbitmqctl set_user_tags admin administrator
3.查看用户列表:./rabbitmqctl list_users
4.修改新用户的权限:./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
5.启动rabbitMQ:./rabbitmq-server -detached
6.关闭rabbitMQ:./rabbitmqctl stop_app
7.查看rabbitMQ的状态: ./rabbitmqctl status
8.查看全部命令:./rabbitmqctl help
到这里RabbitMQ就部署完成了,下一回再深入了解一下RabbitMQ。
鹏北海,凤朝阳。又携书剑路茫茫。