Orange는 golang, iris, mysql, redis 기술 프레임워크로 구성된 메시지 푸시 서비스입니다. WeChat 구독 메시지, SMS 메시지 및 이메일 메시지의 통합되고 구성 가능한 관리 및 전송을 지원합니다. 다양한 전략 전송을 지원합니다. 템플릿 리소스를 효과적으로 관리하고, 중요한 단어를 필터링하고, 추가 구성 및 템플릿 정책을 사용자 지정하고, 메시지 본문을 기록하고, 여러 비즈니스 방향에 대한 메시지 전송 서비스를 제공합니다. 간단한 텍스트 자동 회신을 지원합니다.
왜 그런 서비스가 필요합니까? 회사의 사업이 성장하고 서비스가 지속적으로 증가함에 따라 사용자에게 전송해야 하는 메시지도 점점 더 많아지고 있습니다. 주문 알림, 도착 알림, 평가 메시지, 주문 성공 알림, 등록 메시지, 기타 프로모션 정보 등을 사용자에게 보내는 데 필요합니다. WeChat 구독 메시지, Alibaba Cloud SMS, 이메일 전송 및 기타 인터페이스와 같은 타사 전송 인터페이스를 사용하는 것은 많은 양의 메시지를 보내야 하는 서비스의 경우 부적절하게 사용하면 상대적으로 시간이 많이 걸린다는 것은 잘 알려져 있습니다. 심각한 자원 낭비를 초래하고 핵심 비즈니스 로직에도 영향을 미칩니다. 반면에 각 서비스가 메시지 전송을 위한 고유한 논리 세트를 유지한다면 너무 번거로울 것입니다. access_token 유지관리, 인터페이스 유지관리, n 다중 템플릿 유지관리, 민감한 단어 유지관리, 메시지 상태 기록 등 많은 함정이 있습니다. 회사가 n개의 여러 서비스에 대해 이러한 일련의 논리를 유지한다면 중복되고 인력과 물적 자원이 낭비될 것입니다.
이 두 사진을 보면 제가 왜 이렇게 작은 시스템을 쓰고 싶은지 좀 더 직관적으로 알 수 있습니다. 여전히 몇 가지 장점이 있습니다.
1.golang
2.iris
3.redis
4.mysql
5.阿里云短信
6.微信订阅消息
7.邮件发送类库
8.mq平台
9.阿里云acm
go ( > = 1.13.1)
1.git clone https://github.com/lovesgg/orange_message_service.git
2.cd orange_message_service
3.执行命令开启mod支持: export GO111MODULE=on
4.更换代理: export GOPROXY=https://goproxy.cn
5.下载依赖: go mod vendor
6.cp conf/app.json.example conf/app.json
7.加配置信息如redis mysql 端口等
1.app.json 环境+端口
2.log.json 日志目录
3.message.json 消息配置模板 可自定义通道和模板
4.mysql.json mysql配置信息 需要自行定义数据库和表。根据自己需要的字段创建和对应代码中的字段即可。可直接使用.doc目录下的message.sql文件去建表
5.redis.json redis配置信息
6.sms.json 阿里云短信配置
7.wechat.json 微信订阅消息的appid配置
8.acm.json 阿里云应用配置
(如果需要追加.json文件,请在app/components/config/config.go中修改)
7.配置完信息可以拷贝配置文件到另一个目录啦
mkdir /data/www/orange_message_service/conf
cp -r orange_message_service/conf/ * /data/www/orange_message_service/conf
(这步骤是因为当您使用 rizla main.go时读的是这位置的配置)
8.创建日志目录
mkdir /data/logs/orange_message_service
9.mq订阅发布
请自行安装当前流行的mq平台。
/client/send 负责发送mq消息
/server/send 负责消费消息mq
(备注:/client/send 接口里边最后有说明 //执行mq发送 由server端来消费 这部分由您根据实际需要自行添加。如有问题可微信联系。)
10.到这里可以认为您的环境已经没问题
到orange_message_service根目录下执行 rizla main.go即可运行啦。当然您也可以go run main.go
如果运行报错请先自行排查环境是否都已经安装完毕,或者先自行百度。不清楚的可直接微信联系。
推荐message.json配置:可自定义
{
" 1000 " :{
" sequence " :[ " subscribe " ],
" subscribe " :{
" channel " : "微信订阅消息" ,
" template " : " SendDataTest " ,
" is_retry " :0
},
" sms " :{
" channel " : "阿里云" ,
" template " : " SendDataTest " ,
" is_retry " :0
}
},
" 1001 " :{
" sequence " :[ " email " ],
" email " :{
" channel " : "邮件" ,
" template " : " SendDataTest " ,
" is_retry " :0
}
}
}
1.key值唯一,上游服务根据这唯一通道+模板参数组成。一次调用只需要关注这id和必要参数即可。
2.sequence:通道数组。循环发送。比如[ " sms " , " email " , " subscribe " ] 此消息依次发送短信、邮件、订阅消息。
3.email | sms | subscribe 里的参数:
template对应的是一个方法,每个key对应的次方法唯一。
is_retry:如果发送失败是否需要重试。
详情参考以下接口调用。
├── README.md
├── app
│ ├── common
│ │ ├── aliyun.go
│ │ ├── constant.go
│ │ ├── enum
│ │ │ ├── event_name.go
│ │ │ ├── redis_expire.go
│ │ │ ├── redis_key.go
│ │ │ └── topic.go
│ │ ├── error.go
│ │ ├── structure.go
│ │ ├── templates.go
│ │ └── wechat.go
│ ├── components
│ │ ├── config
│ │ │ └── config.go
│ │ ├── eventdispatcher
│ │ │ ├── event.go
│ │ │ ├── eventdispatcher.go
│ │ │ ├── eventdispatcher_test.go
│ │ │ ├── listener.go
│ │ │ └── log.go
│ │ ├── go-email
│ │ │ └── go_email.go
│ │ ├── http
│ │ │ ├── client.go
│ │ │ └── request.go
│ │ ├── init.go
│ │ ├── mlog
│ │ │ └── log.go
│ │ ├── mysql
│ │ │ └── client.go
│ │ ├── redis
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── hash.go
│ │ │ ├── hash_test.go
│ │ │ ├── string.go
│ │ │ └── string_test.go
│ │ ├── rpc
│ │ │ ├── base_rpc.go
│ │ │ └── config.go
│ │ ├── sms
│ │ │ ├── aliyun.go
│ │ │ └── aliyun_test.go
│ │ └── test
│ │ └── helper.go
│ ├── console
│ │ ├── commands
│ │ │ ├── hello.go
│ │ │ ├── init.go
│ │ │ └── server_send.go
│ │ └── root.go
│ ├── controllers
│ │ ├── base_controller.go
│ │ ├── client
│ │ │ ├── send_action.go
│ │ │ └── send_controller.go
│ │ └── server
│ │ ├── send_action.go
│ │ └── send_controller.go
│ ├── events
│ │ └── rpc_call_warning.go
│ ├── middleware
│ │ ├── recover_panic.go
│ │ ├── request_bootstrap.go
│ │ └── request_logger.go
│ ├── models
│ │ ├── message.go
│ │ └── request
│ │ └── request.go
│ ├── render
│ │ └── sms.go
│ ├── router
│ │ └── routes.go
│ ├── services
│ │ ├── client
│ │ │ └── client.go
│ │ ├── db.go
│ │ ├── repository
│ │ ├── rpc
│ │ ├── server
│ │ │ ├── email.go
│ │ │ ├── emailTemplates
│ │ │ │ └── email.go
│ │ │ ├── sms.go
│ │ │ ├── smsTemplates
│ │ │ │ └── sms.go
│ │ │ ├── subscribe.go
│ │ │ ├── subscribeTemplates
│ │ │ │ └── subscribe.go
│ │ │ └── word.go
│ │ └── wechat.go
│ └── utils
│ ├── compress
│ │ └── zlib.go
│ ├── helper.go
│ └── typeconv
│ └── type_trans.go
├── bin
│ ├── orange_message_service.supervisor.conf
│ ├── pre-commit
│ ├── start.sh
│ ├── stop.sh
│ └── supervisord.conf
├── build.sh
├── cmd
│ └── main.go
├── conf
│ ├── app.json
│ ├── app.json.example
│ ├── common.json
│ ├── email.json
│ ├── filter_words.json
│ ├── log.json
│ ├── message.json
│ ├── mysql.json
│ ├── redis.json
│ ├── rpc.json
│ ├── sms.json
│ └── wechat.json
├── docker-compose.yml
├── dockerfile
├── go.mod
├── go.sum
├── main.go
├── nursery
├── orange_message_service
├── output
│ └── server
└── runtime
说明:
1.入口main文件:main.go
2.可执行文件:orange_message_service
3.mod管理文件:go.mod/go.sum
4.路由文件:app/router/routers.go
5.项目配置文件:conf/
6.控制器路径:app/controllers
7.公共常量枚举:app/common
8.公共组件:app/components
9.启动文件:build.sh (rizla main.go 也行)
일련번호 | 인터페이스 | 인삼 추가 | 주목 |
---|---|---|---|
1 | /건강/확인 | 없음 | 서비스가 정상적으로 시작되는지 확인하기 위해 일반 정보를 반환합니다. |
2 | /클라이언트/보내기 | 다음을 참조하세요 | 클라이언트가 수신 |
3 | /서버/보내기 | 다음을 참조하세요 | 서버 소비 및 전송 |
4 | /클라이언트/배치 보내기 | 다음을 참조하세요 | 대량으로 보내기 |
5 | /클라이언트/동기화로 보내기 | 다음을 참조하세요 | 코루틴 일괄 전송(이 방법을 사용하는 것이 좋습니다) |
6 | /client/send-by-users | 다음을 참조하세요 | 코루틴 일괄 전송 - 일괄 사용자가 동일한 템플릿 메시지를 보냅니다(이 방법을 권장함) |
7 | /고객/말하다 | 다음을 참조하세요 | 고객 서비스는 자동으로 응답을 일치시킵니다. |
1. /client/send
{
" msg_key " :1000,
" source_id " :1,
" body " :[{
" goods_name " : "苹果" ,
" store_name " : " wg " ,
" address_detail " : " wgrg " ,
" phone " : " 1881000000 " ,
" note " : "你好" ,
" user_id " : " " ,
" order_no " : " 543646 "
}]
}
2. /server/send
{
" msg_key " :1000,
" source_id " :1,
" body " :{
" goods_name " : "苹果" ,
" store_name " : " wg " ,
" address_detail " : " wgrg " ,
" phone " : " 1881000000 " ,
" note " : "你好" ,
" user_id " : " " ,
" order_no " : " 543646 "
}
}
3./client/send-by-users
{
" msg_key " :1003,
" source_id " :1,
" users " :[
" [email protected] " ,
" [email protected] "
]
}
4./customer/say
{
" text " : " test "
}
包含一些说明图片
见orange_message_service/.doc 目录下的图片
此服务适合有经验的人。因为涉及一些第三方接口和几个环境的部署。建议用在发送消息比较多的场景。如果只是发很简单的消息不推荐用这个。
其中可能包含部分不足的地方。陆续优化中。如果用在生产环境,需要掌握熟悉了才部署。
欢迎好友来一起交流探讨。