本节,我们将整合RabbitMQ作为我们项目的消息中间件。暂时我们只做单机配置。
本章源码
RabbitMQ 安装配置
这里我只介绍下CentOS7下的RabbitMQ安装。
安装依赖erlang
- 使用yum下载(可能不是最新版,新版的RabbitMQ需要新版的erlang)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| vim /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/6 gpgcheck=1 gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1
yum makecache yum update
yum install erlang
|
安装RabbitMQ
1
| yum install rabbitmq-server
|
1 2 3 4
| wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.4/rabbitmq-server-3.7.4-1.el7.noarch.rpm
yum install rabbitmq-server-3.7.4-1.el7.noarch.rpm
|
RabbitMQ管理
开机启动
1
| chkconfig rabbitmq-server on
|
运行停止
1 2
| /sbin/service rabbitmq-server start /sbin/service rabbitmq-server stop
|
开启web管理界面
1
| rabbitmq-plugins enable rabbitmq_management
|
打开浏览器访问http://localhost:15672/
,使用默认用户guest
登录,密码也为guest
,进入管理页面。如果用的是阿里云服务器,需要安全组开启15672和5672端口。
如果你是把rabbitmq部署在服务器上,访问管理页面可能会提示guest
不能登入,可以使用下面的命令添加用户:
1.查看RabbitMQ中用户命令
rabbitmqctl list_users
2.创建用户命令
rabbitmqctl add_user wt 123456
3.赋予用户权限命令
rabbitmqctl set_permissions -p "/" wt '.\*' '.*' '.*'
4.赋予用户角色命令
rabbitmqctl set_user_tags wt administrator
Spring Boot整合
web模块下的pom.xml引入依赖:
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
|
application.yml添加一下配置:
1 2 3 4 5 6
| spring: rabbitmq: addresses: 101.132.44.128 port: 5672 username: wt password: 123456
|
新建一个RabbitConfig配置类。用来配置队列、交换器、路由等高级信息。这里我们以入门为主,新建一个hello
队列。
1 2 3 4 5 6 7 8 9
| import org.springframework.amqp.core.Queue; @Configuration public class RabbitConfig {
@Bean public Queue helloQueue() { return new Queue("hello"); } }
|
新建一个Producer类,用来发送信息:
1 2 3 4 5 6 7 8 9
| @Component public class HelloProducer { @Autowired private AmqpTemplate amqpTemplate;
public void send(String msg) { amqpTemplate.convertAndSend("hello", msg); } }
|
新建一个Consumer,用来消费信息:
1 2 3 4 5 6 7 8 9 10 11 12
| @Component
@RabbitListener(queues = "hello") @Slf4j public class HelloConsumer { @RabbitHandler public void process(String msg) { log.info("mq msg : " + msg); }
}
|
新建一个测试类,测试一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @RunWith(SpringRunner.class) @SpringBootTest(classes = DemoApplication.class) @Slf4j public class Test1 { @Autowired private HelloProducer helloProducer;
@Test public void test1() { for (int i = 0; i < 100; i++) { helloProducer.send("hello + " + i); } log.info("send ok"); } }
|
运行测试类,查看console的输出,发现我们的配置以及生效。也可以在rabbitmq的web管理页面看到我们的Queue信息。
到目前为止,一个基本的消息生产和消费过程已经完成了。更多的配置和高级的用法,我们之后再研究(我也还不知道)。