RabbitMq消息服务(SpringBoot)
AMQP
中文名:高级消息队列协议,他是线路层协议规范,所以可以跨平台,就像是HTTP一样,只要按照规范发送数据,就可以通过AMQP进行消息交互,本文基于我安装了超级久的RabbitMQ
RabbitMQ
RabbitMQ 是实现了AMQP的消息中间件,使用Erlang编写,所以使用前要安装Erlang环境
#下载
wget http://erlang.org/download/otp_src_21.0.tar.gz
#解压
tar -zxvf otp_src_21.0.tar.gz
cd otp_src_21.0
#编译
./otp_build autoconf
./configure
make
#安装
make install
#检验
erl
#编辑文件
vi /etc/yum/repos.d/rabbitmq-erlang/21/el/7
[rabbitmq-erlang]
name-rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
#清楚缓存
yum clean all
yum makecache
#安装RabbitMQ
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7.el7.noarch.rpm
#安装
yum install rabbitmq-server-3.7.7-1.el7.noarch.rpm
#添加依赖
yum install socat
#启动
service rabbitmq-server start
#查看状态
rabbitmqctl status
#开启web插件
rabbitmq-plugins enable rabbitmq-management
#重启
service rabbitmq-server restart
#添加一个用户
rabbitmqctl add_user root root
#设置管理员
rabbitmqctl set_user_tags root administrator
#配置root可以远程登录
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
RabbitMQ用自己的电脑Web登录:
http://IP:15672/
用idea连接是用的端口是5672,还有就是千万记得在安全组开放这些端口!
How to use
Direct
DirectExchange的路由策略是将消息队列绑定到一个DriectExchange上,当一条消息到达DirectExchange上,就会被转发到与该消息routing key相同的Queue上。
看看这种方式的配置:
@Configuration
public class RabbitDirectConfig {
@Bean
Queue queue() {
return new Queue("hello-queue");
}
}
创建一个Queue实例,设置他的name为"hello-queue",当有一条信息带着routing key为"hello-queue"时,就会传入这个队列中.
Fanout
FanoutExchange交换策略是把所有到达FanoutExchange的消息转发给所有跟他绑定的Queue实例上,此时就不需要routingkey了
配置如下:
@Configuration
public class RabbitFanoutConfig {
public final static String FANOUTNAME = "panlijie-fanout";
@Bean
Queue queue_one() {
return new Queue("queue-one");
}
@Bean
Queue queue_two() {
return new Queue("queue-two");
}
@Bean
Queue queue_three() {
return new Queue("queue-three");
}
/**
* 创建FanoutExchange实例,用来接受传入的消息,然后转发给某些Queue信息通道
* @return
*/
@Bean
FanoutExchange fanoutExchange() {
return new FanoutExchange(FANOUTNAME, true, false);
}
/**
* 这个将通道2绑定到FanoutExchange中
* @return Binding实例
*/
@Bean
Binding bindingTwo() {
return BindingBuilder
.bind(queue_two())
.to(fanoutExchange());
}
/**
* 这个将通道1绑定到FanoutExchange中
* @return Binding实例
*/
@Bean
Binding bindingOne() {
return BindingBuilder
.bind(queue_one())
.to(fanoutExchange());
}
}
routingKey直接传入null,因为用不上。第三个参数传入消息内容(Object)
Topic
TopicExchange是既复杂又灵活的策略,在TopicExchange中,Queue通过routingkey绑定到TopicExchange上,当消息送到TopicExchange后,TopicExchange根据消息的routingkey将消息路由到不同的Queue中。
直接上配置
@Configuration
public class RabbitFanoutConfig {
public final static String TOPICNAME = "panlijie-topicname";
@Bean
Queue queueApple() {
return new Queue("queueApple");
}
@Bean
Queue queueOrange() {
return new Queue("queueOrange");
}
@Bean
Queue queueFruit() {
return new Queue("queueFruit");
}
/*
创建topicExchange实例,name=TOPICNAME
*/
@Bean
public TopicExchange topicExchange() {
return new TopicExchange(TOPICNAME, true, false);
}
/*
将以apple开头的 routingKey的待发消息传到指定topicExchange然后再传到绑定的queue通道
*/
@Bean
Binding bindingToApple() {
return BindingBuilder.bind(queueApple()).to(topicExchange()).with("apple.#");
}
/*
将以orange开头的 routingKey的待发消息传到指定topicExchange然后再传到绑定的queue通道
*/
@Bean
Binding bindingToOrange() {
return BindingBuilder.bind(queueOrange()).to(topicExchange()).with("orange.#");
}
/*
将包含fruit routingKey的待发消息传到指定topicExchange然后再传到绑定的queue通道
*/
@Bean
Binding bindingToFruit() {
return BindingBuilder.bind(queueFruit()).to(topicExchange()).with("#.fruit.#");
}
}
用到("#.fruit.#")时,fruit必须被 . 包围,不然传不到
heade
这个暂时放下
本文地址:https://blog.csdn.net/coding_deliver/article/details/109631203
推荐阅读
-
微信公众服务号怎么一天发一条图文消息?
-
SpringBoot2 整合 Zookeeper组件,管理架构中服务协调
-
Spring Boot2.X整合消息中间件RabbitMQ原理简浅探析
-
Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
-
Go语言【项目】 websocket消息服务
-
Springboot如何基于assembly服务化实现打包
-
RabbitMQ消息队列之Windows下安装和部署(一)
-
rabbitmq~消息失败后重试达到 TTL放到死信队列(事务型消息补偿机制)
-
SignalR Self Host+MVC等多端消息推送服务(三)
-
SignalR Self Host+MVC等多端消息推送服务(二)