【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)

需要全部代码请点赞关注收藏后评论区留言私信~~~

一、系统简介

分布式优惠券后台应用系统服务于两类用户群体,一类是商户,商户可以根据自己的实际情况即进行优惠券投放,另一类是平台消费用户,用户可以去领取商户发放的优惠券

二、整体架构

分布式优惠券后台应用系统采用SpringBoot作为主体开发框架,使用Kafka消息队列实现优惠券从商户到用户的传递,Mysql存储商户信息,HBase存储用户信息,优惠券信息等,Redis保存优惠券的缓存信息 系统整体架构如下

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第1张图片

 对于商户投放子系统,商户注册生成对应的商户实体信息,并保存到Mysql数据库,商户可以投放自己商家的优惠券,且优惠券有自己的Token存放于Redis中,投放的优惠券信息将由Kafka向用户消费子系统发送,而商户投放的优惠券并不在Mysql中进行存储,而是在商户投放子系统中放送消息给Kafka,用户消费子系统通过侦听Kafka消息获得Kafka分布式信息并存储到HBase中,用户通过读取Redis中的优惠券信息领取消费券,并将自己领取到的优惠券信息存放在HBase中

三、表结构设计

mysql表结果设计如何 存放商户基本信息

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第2张图片

HBase表结构设计

在HBase中建立三个表,分别是消费用户表,优惠券表和优惠券领取表

 【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第3张图片

 【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第4张图片

 【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第5张图片

四、系统实现

1:新建MAVEN工程 引入相关依赖包

2:修改applicaiton.yml文件 包括mysql和kafka的连接相关配置

3:建立各个类包存放路径

4:核心代码实现

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第6张图片

 【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第7张图片

 五、效果展示

商户投放子系统成功启动效果如下

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第8张图片

 用户子系统成功启动效果如下

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第9张图片

 发放优惠券界面如下

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第10张图片

 数据库表插入情况如下

【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)_第11张图片

 六、部分代码

部分代码如下 需要全部代码请点赞关注收藏后评论区留言私信~~~
 

package com.coupon.passbook.controller;

import com.coupon.passbook.log.LogConstants;
import com.coupon.passbook.log.LogGenerator;
import com.coupon.passbook.service.IUserService;
import com.coupon.passbook.vo.Response;
import com.coupon.passbook.vo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * 

创建用户服务

* Created by Qinyi. */ @Slf4j @RestController @RequestMapping("/passbook") public class CreateUserController { /** 创建用户服务 */ private final IUserService userService; /** HttpServletRequest */ private final HttpServletRequest httpServletRequest; @Autowired public CreateUserController(IUserService userService, HttpServletRequest httpServletRequest) { this.userService = userService; this.httpServletRequest = httpServletRequest; } /** *

创建用户

* @param user {@link User} * @return {@link Response} * */ @ResponseBody @PostMapping("/createuser") Response createUser(@RequestBody User user) throws Exception { LogGenerator.genLog( httpServletRequest, user.getId(), LogConstants.ActionName.CREATE_USER, user ); return userService.createUser(user); } }

控制器2

package com.coupon.passbook.controller;

import com.coupon.passbook.log.LogConstants;
import com.coupon.passbook.log.LogGenerator;
import com.coupon.passbook.service.IFeedbackService;
import com.coupon.passbook.service.IGainPassTemplateService;
import com.coupon.passbook.service.IInventoryService;
import com.coupon.passbook.service.IUserPassService;
import com.coupon.passbook.vo.Feedback;
import com.coupon.passbook.vo.GainPassTemplateRequest;
import com.coupon.passbook.vo.Pass;
import com.coupon.passbook.vo.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * 

Passbook Rest Controller

* Created by Qinyi. */ @Slf4j @RestController @RequestMapping("/passbook") public class PassbookController { /** 用户优惠券服务 */ private final IUserPassService userPassService; /** 优惠券库存服务 */ private final IInventoryService inventoryService; /** 领取优惠券服务 */ private final IGainPassTemplateService gainPassTemplateService; /** 反馈服务 */ private final IFeedbackService feedbackService; /** HttpServletRequest */ private final HttpServletRequest httpServletRequest; @Autowired public PassbookController(IUserPassService userPassService, IInventoryService inventoryService, IGainPassTemplateService gainPassTemplateService, IFeedbackService feedbackService, HttpServletRequest httpServletRequest) { this.userPassService = userPassService; this.inventoryService = inventoryService; this.gainPassTemplateService = gainPassTemplateService; this.feedbackService = feedbackService; this.httpServletRequest = httpServletRequest; } /** *

获取用户个人的优惠券信息

* @param userId 用户 id * @return {@link Response} * */ @ResponseBody @GetMapping("/userpassinfo") Response userPassInfo(Long userId) throws Exception { LogGenerator.genLog( httpServletRequest, userId, LogConstants.ActionName.USER_PASS_INFO, null ); return userPassService.getUserPassInfo(userId); } /** *

获取用户使用了的优惠券信息

* @param userId 用户 id * @return {@link Response} * */ @ResponseBody @GetMapping("userusedpassinfo") Response userUsedPassInfo(Long userId) throws Exception { LogGenerator.genLog( httpServletRequest, userId, LogConstants.ActionName.USER_USED_PASS_INFO, null ); return userPassService.getUserUsedPassInfo(userId); } /** *

用户使用优惠券

* @param pass {@link Pass} * @return {@link Response} * */ @ResponseBody @PostMapping("/userusepass") Response userUsePass(@RequestBody Pass pass) { LogGenerator.genLog( httpServletRequest, pass.getUserId(), LogConstants.ActionName.USER_USE_PASS, pass ); return userPassService.userUsePass(pass); } /** *

获取库存信息

* @param userId 用户 id * @return {@link Response} * */ @ResponseBody @GetMapping("/inventoryinfo") Response inventoryInfo(Long userId) throws Exception { LogGenerator.genLog( httpServletRequest, userId, LogConstants.ActionName.INVENTORY_INFO, null ); return inventoryService.getInventoryInfo(userId); } /** *

用户领取优惠券

* @param request {@link GainPassTemplateRequest} * @return {@link Response} * */ @ResponseBody @PostMapping("/gainpasstemplate") Response gainPassTemplate(@RequestBody GainPassTemplateRequest request) throws Exception { LogGenerator.genLog( httpServletRequest, request.getUserId(), LogConstants.ActionName.GAIN_PASS_TEMPLATE, request ); return gainPassTemplateService.gainPassTemplate(request); } /** *

用户创建评论

* @param feedback {@link Feedback} * @return {@link Response} * */ @ResponseBody @PostMapping("/createfeedback") Response createFeedback(@RequestBody Feedback feedback) { LogGenerator.genLog( httpServletRequest, feedback.getUserId(), LogConstants.ActionName.CREATE_FEEDBACK, feedback ); return feedbackService.createFeedback(feedback); } /** *

用户获取评论信息

* @param userId 用户 id * @return {@link Response} * */ @ResponseBody @GetMapping("/getfeedback") Response getFeedback(Long userId) { LogGenerator.genLog( httpServletRequest, userId, LogConstants.ActionName.GET_FEEDBACK, null ); return feedbackService.getFeedback(userId); } /** *

异常演示接口

* @return {@link Response} * */ @ResponseBody @GetMapping("/exception") Response exception() throws Exception { throw new Exception("Welcome To IMOOC"); } }

 创作不易 觉得有帮助请点赞关注收藏~~~

你可能感兴趣的:(Spring,Boot,分布式,spring,boot,kafka,mysql,hbase)