RocketMQ基本原理

简单生产者书写
启动NAMESERVER;
java
start mqnamesrv.cmd
启动BROKER;
java
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
java
public static void main(String[] args) throws Exception {
//1、谁来发
DefaultMQProducer producer = new DefaultMQProducer("group1");
//2、发给谁 nameserver的地址 它掌管所有地址
producer.setNamesrvAddr("localhost:9876");
producer.start();
//3、怎么发
//4、发什么
Message msg = new Message("topic1", "hello rocketmq".getBytes("UTF-8"));
SendResult result = producer.send(msg);
//5、发送的结果
System.out.println("返回结果:" + result);
//6、打扫战场
producer.shutdown();
}
}
简单消费者书写


多消费者模式
负载均衡(集群模式)
广播模式
默认是集群模式
即集群模式下,同个主题对于不同组是"广播模式",每个组都会消费同个消息;会重复消费;对于同个组是"集群模式",每个消费者平坦消息,不会重复消费;

多生产者模式
消息类型
同步、异步、单向消息



延时消息
单向消息:写日志文件等
延时消息:游戏、推送玩家回归等
批量消息:



tag过滤
用于:用于处理普通消息和vip消息
消息(sql)过滤
消费可追加属性、这个可以用于过滤消息、比如年龄大于18等;

springboot整合-生产者
java
@Autowired
RocketMQTemplate rocketMQTemplate;
@GetMapping("/send")
public String send() {
// String msg = "Hello World";
// Message message = new Message("topic9", "tag1", msg.getBytes());
// rocketMQTemplate.send(message);
// rocketMQTemplate.send(MessageBuilder.withPayload("Hello World").build());
rocketMQTemplate.convertAndSend("topic", "hello");
return "success";
}
java
rocketmq:
name-server: localhost:9876
producer:
group: group1
server:
port: 8081
springboot整合消费者

其余设置
顺序消息错乱
事务消息
面试题


集群



高级特性
消息存储特性


高校读写的两个特性

顺序写:预先预留空间、加快速度
零拷贝:


消息存储的物理地址

刷盘机制

异步输盘:
写入内存、积累一定量;或积累一定时间内、写入磁盘;


高可用性
用到MQ、毕竟是引入新特性、可用性会降低;
从以下四个方面解释

负载均衡

循环平均分配更好

消息重试



死信队列


消费重复消费
重复消费的原因:


