第六--微服务框架

rabbitmq, spring cloud, dubbo


一、rabbitmq

1.RabbitMQ如何确保消息发送 ? 消息接收?

导致生产者消息丢失有哪些原因?
	生产者发送的消息没有到达交换机
		
		
	生产者发送的消息发送的消息到达交换机,但是交换机没有将消息转发到消息队列
		
	队列中的消息未被消费MQ宕机了
		MQ中的消息默认存放在内存中,MQ宕机重启,丢失
		
如何解决生产者消息丢失问题
	前2个问题可以利用消息的确认机制
		什么是消息确认机制
			生产者发送消息到rabbitmq,rabbitmq会给生产者返回结果;
			
		消息确认机制的作用
			通过消息确认机制,生产者可以根据mq返回结果知道消息是否成功发送到了rabbitmq
		消息确认机制分类
			publish-comfirm
				生产者发送消息到交换机消息确认
				成功:ack
				失败:nack
				
			publish-return
				交换机转发消息队列的消息确认
				失败:nack
				
	后1个问题可以利用消息持久化
消费者消息确认机制
	消费者确认消息的三种模式
		none,消费者从MQ中获取消息,无论是否出现异常,rabbitmq都会将消息从消息队列中删除
		manual
			通过手动编码方式,告诉rabbitmq消息已经进行了消费,rabbitmq会自动将消息删除
		auto(默认),根据消费者是否有抛出异常,自动告诉rabbitmq,消费者是否成功消费了消息;
	消费者确认模式的配置方式是什么?
		消费者的application.yml

2.在RabbitMQ中常见工作工作模式?

https://www.rabbitmq.com/getstarted.html
简单工作模式
工作队列模式
发布订阅模式
路由模式
Topic模式
RPC模式

3.RabbitMQ死信队列、延时队列

死信
	一个消息如果出现以下三种情况就会成为死信
	被消费者拒绝掉的消息
		在消费者的方法中定义一个Channel
		channel.basicReject();
	消息过期(演示)
		在创建消息队列的时候,可以给消息设置存活时间x-message-ttl,如果在存活时间内,消息没有被消费,消息就成为死信
	消息队列堆积满了溢出的消息
		创建消息队列的时候,可以给消息队列设置长度x-max-length,如果队列中的消息堆积满了,溢出的消息就成为了死信
死信的去向
	消息成为死信后第一种情况是被丢弃
	如果队列指定了死信交换机,消息就会进入死信交换机,由死信交换机路由到死信队列
死信交换机
	普通交换机所以可以为任何类型【Direct、Fanout、Topic】
在RabbitMQ中利用死信交换机 + 消息ttl

4.简述RabbitMq的交换机类型

Direct(路由)
	
Fanout(发布订阅)
	
Topic(通配符)

5.rabbitmq可以直连队列么.

不能
简单工作模式好像不用交换机?
	底层使用的是默认交换机

6.简述rabbitmq的持久化机制.

消息持久化(自讲)
	交换机如何持久化?
		在RabbitMQ中我们要保证交换机持久化,否则当MQ宕机后重启,交换机丢失
	队列如何持久化?
		在RabbitMQ中我们要保证队列,否则当MQ宕机后重启,队列丢失
	消息持久化

7.简述rabbitmq的普通集群模式.

普通集群
	分布式集群,消息队列分散在集群的不同节点;
	消息也是分散在集群的不同节点
	如果某个节点宕机,分散在这些节点上的队列不能使用

8.rabbitmq的镜像集群.

镜像集群
	什么是镜像集群?
		基于主从架构的集群,同一个队列可能在多个节点上都有
	主节点
		创建队列的节点称为主节点
	什么是镜像节点
		备份到其他节点的节点称为镜像节点
		主节点和镜像节点是相对的;
	备份策略
		exactly
			指定镜像节点具体数字
				rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
		all
			集群中其他节点都会备份
				rabbitmqctl set_policy ha-all "^all\." '{"ha-mode":"all"}'
		nodes
			指定那些节点备份
				rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["rabbit@nodeA", "rabbit@nodeB"]}'
	缺点:仅仅保证主从节点的最终一致性

9.kafka如何保证消息消费的顺序性

1.kafka的主题采用分区机制实现消息的物理存储。
2.一个主题在物理上可以有多个分区
3.生产者发送消息的时候,消息采用key的hash算法进入不同的分区。
4.生产者发送的多个消息可能会进入不同的分区。
4.消费者从不同分区中进行消息消费的时候,这个顺序和发送的顺序就不一定是一致的。
如何保证顺序性呢?
	1.可以采用自定义的路由算法,让key进入统一分区,分区中的消息是有序的,让一个消费者从该分区中进行消息消费
	2.消费者在进行消息消费的时候可能是采用多线程的方式进行消费,每个线程的处理效率不用。所以也无法保证有序性,单个分区也可能出现无序性问题.
消费者将获取到的消息放入阻塞队列,消费者单独开一个线程从阻塞队列中获取消息。

10.RabbitMQ如何保证消息消费的顺序性

	这个问题产生的原因
		RabbitMQ的一个交换机可以绑定多个队列
		生产者在发送消息的时候,不同的消息可以路由到不同的队列
		消费者从不同的队列获取消息,导致消息的发送顺序和消费顺序不一致;
	解决
		将消息发送到同一个队列,消息在队列中是有序的。
定义一个消费者从该队列获取消息。
		消费者在进行消息消费的时候可能是采用多线程的方式进行消费,每个线程的处理效率不用。所以也无法保证有序性,同一个队列中的消息也无法保证顺序性。
消费者将获取到的消息放入阻塞队列,消费者单独开一个线程从阻塞队列中获取消息。

11.幂等性

	计算机领域
		方法多次被执行和第一次执行的影响是一样的。
		用户的重复提交或者恶意请求导致接口被多次重复请求。
		微服务架构中,为了避免网络抖动导致的数据丢失,在服务之间通信的时候采用超时重试机制。这种机制有可能导致接口被重复访问。
		所以在数据变更的接口中要保证幂等性。
幂等性要保证这个接口执行的结果只影响一次,后续再次调用也不能产生影响。

在这里插入图片描述
在这里插入图片描述
3.乐观锁。


二、spring cloud

1.


三、dubbo

1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值