# bright-mq
**Repository Path**: kill4it/bright-mq
## Basic Information
- **Project Name**: bright-mq
- **Description**: - BrightMQ是基于mysql-binlog的轻量级高性能开源的消息队列中间件,利用数据库特性,极少的代码实现服务间的异步解耦、数据一致性、重复消费等问题。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2022-09-19
- **Last Updated**: 2022-10-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 介绍
- BrightMQ是基于mysql-binlog的轻量级高性能开源的消息队列中间件,利用数据库特性,极少的代码实现服务间的异步解耦、数据一致性、重复消费等问题。
- 使用独立数据源,无业务侵入。
- 一般企业在使用MQ时,主要解决异步解耦与数据一致性问题,而性能问题一般不是使用MQ首要原因。
- 不超过独立数据库写入瓶颈的消息队列需求,本方案适合。
### 解决的问题
- 企业在使用MQ来解决实际问题的成本越来越高,系统复杂度增加,BrightMQ大大的加强了消息队列的易用性。
- 增加可维护性,不依赖外部消息中心,开发者会使用mysql就会很方便的管理消息。
- 简化系统复杂度。 将消息处理分散到各个业务服务,避免中心化处理消息的性能与效率的问题。
- 横向可扩展,一个表存储一种消息类型,增加表类似增加消息业务场景或topic。
- 业务解耦,使用独立数据源,无业务侵入。
- 本源码抛砖引玉,可自行根据源码扩展,开发者可自行优化与完善更多适合自己业务场景的消息能力。
### 架构图

### 使用教程
- 在项目中引入spring-boot-brightmq-starter的jar包后即拥有了生产消息、消费消息的,轻量易用,减少系统复杂度,减少外部依赖。
- 源码在core文件夹下,打包后即生成上述的spring-boot-brightmq-starter的jar包。
- 开源协议Apache License 2.0。
### 1、引入依赖 (可参考demo)
- 方式1:本地引用
```
com.z-mq
spring-boot-brightmq-starter
1.0.0
system
${project.basedir}/lib/spring-boot-brightmq-starter.jar
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-jdbc
com.github.shyiko
mysql-binlog-connector-java
0.21.0
org.springframework.boot
spring-boot-starter-aop
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-maven-plugin
2.7.3
true
```
- 方式2:公共仓库引用
```
com.z-mq
spring-boot-brightmq-starter
1.0.0
```
### 2、配置 (可参考demo)
- 需要独立的存储消息的数据库配置。主要多了一个binlog监听的serviceId配置。执行脚本查看自己数据库的serviceId: `show variables like 'server_id'`
```
# 服务原本的业务数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 此处需要注意,原来若是url则需改成jdbc-url
jdbc-url: jdbc:mysql://****:3306/ming_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: ****
password: ****
# mq消息存储数据源
bright-mq:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://****:3306/bright-mq?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: ****
password: ****
# 监听binlog的service-id。执行sql脚本 show variables like 'server_id'; 进行查看
binlog-service-id: 20571336
#消费失败的消息,重试消费任务配置
consume-task:
# 重试次数:不配置则默认重试10次
max-failed-times: 15
# 重试时间间隔:不配置则默认每次执行结束后10秒再次重试,单位毫秒
fixed-delay: 2000000
```
- 启动类上增加扫描。
```
@ComponentScan({"com.mzy.brightmq"})
```
### 3、使用 (可参考demo)
- 发消息
```
@Autowired
private MessageService messageService;
//创建一个default_message存储的消息
Message message= new Message()
//必填字段,指定存储表(类似topic,一个表存储同一个类型的消息)
.setTableName("default_message")
//必填字段
.setContent("任意的消息")
//选填字段,自定义的业务唯一ID
.setBizId(UUID.randomUUID().toString());
//发送消息
messageService.sendMessage(message);
```
- 消费消息
```
/**
* 消费者消费消息,必须实现接口BrightMQConsumer。并在@Service注解中指定topic(表名)
* @author BrightSpring
*15
*/
@Slf4j
@Service("demo_message")
public class DemoConsumer implements BrightMQConsumer {
@Override
public boolean consumeMessage(Message message) {
log.info("检测到一条消息,我要消费了={}",message);
return true;
}
}
```
### 开源协议: Apache License2.0
借助本项目的代码或思想进行二次开发或二次开源,请记得帮助宣传,开源不易,感谢!
欢迎大家star与收藏。
完全开源,请作者喝杯茶吧!
| 请作者喝杯茶吧 | 联系作者 |
|---|---|
|||