学习RabbitMQ简单总结

RabbitMQ
Publisher Server(Broker) Consumer
Connection是RabbitMQ的socket连接,它封装了socket协议相关部分逻辑。
ConnectionFactory为Connection的制造工厂。

 Channel: 信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接上的虚拟连接,
AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。
因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。
 Message: 消息,消息由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,
这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息
可能需要持久性存储)等。
Virtual Host: 虚拟主机,表示一批交换器、消息队列和相关对象。用于进行逻辑隔离,最上层的消息路由;
一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue
Exchange:交换机
Queue:队列
Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routinng key
routing key:一个路由规则
生产者发送消息时指定一个Exchange和路由key
一个Exchange可以绑定多个队列

RabbitMQ整合SpringBoot:
引入相关依赖
对application.properties进行配置

Exchange Type
1 Direct 完全匹配,单播;
2 Topic 通过模式匹配分配消息的路由键属性 *匹配一个单词 #匹配多个单词
3 Fanout 每个发到fanout类型交换器的消息都会分到所有绑定的队列上去,
fanout交换器不处理路由键,只是简单的将队列绑定到交换器上,
每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上.
fanout发送消息是最快的.

@RabbitHandler

@RabbitListener(
     queues="queue-name" //监听队列
	 queuesToDeclare=@Queue("queue-name")//通过注解自动创建队列 
	 
	 bindings=@QueueBinding(
	    value=@Queue("queue-name",durable="true"),
		exchange=@Exchange(name="queue-name",durable="true"//是否持久化,type="topic"),
		key="keyname"
		//自动创建并绑定交换机和队列,若已经存在,抛出异常
	 )
)
   @RabbitListener注解在类上表示当有消息的时候就交给@RabbitHandler的方法处理,具体哪个
                  方法处理,根据MessageConverter转换后的参数类型决定

@Payload 注解消息中的body
@Handers 注解消息中的headers
@Hander  获取单个Header属性

RabbitMQ保障100%消息投递成功设计方案
(一)
1 在发消息之前 业务数据入库 消息记录入库
2 sender发消息给broker
3 broker响应返回结果
4 Confirm Listener监听broker返回响应的结果,入库
5 分布式定时任务定时从库中拉取状态(消息投递未响应)的消息,重新投递
6 记录投递次数,超过一定次数,将消息状态改为投递失败

定时任务类加注解@EnableScheduling 实现SchedulingCondigurer

回调函数:confirm确认
final ConfirmCallback confirmCallback=new RabbitTemplate.ConfirmCallback(){
public void confirm(CorrelationData correlationData,boolean ack,String Cause){
//重写方法
}
}

//发送消息方法调用:构建自定义对象信息
     添加:rabbitTemplate.setConfirmCallback(confirmCallback);
	 
	 
RabbitMQ命令:
      	进入安装后的 RabbitMQ 所在目录下的 sbin 目录:
		
		rabbitmq-server 启动
		rabbitmq-server -detached 以守护线程启动
		rabbitmqctl status 查询服务器状态
		rabbitmqctl stop 关闭整个RabbitMQ节点
		rabbitmqctl -n rabbit@server.example.com stop 关闭指定节点
		rabbitmqctl stop_app 关闭RabbitMQ应用程序
		rabbitmqctl start_aoo 启动RabbitMQ应用程序
		rabbitmqctl reset 重置RabbitMQ节点
		rabbitmqctl list_queues 产看已声明的队列
		rabbitmqctl list_exchanges 产看已声明交换器
		rabbitmqctl list_bindings 查看绑定
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值