博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个综合的分布式项目之功能代码
阅读量:6551 次
发布时间:2019-06-24

本文共 5205 字,大约阅读时间需要 17 分钟。

hot3.png

    看过第一篇博客的应该都知道流程,虽然并不是一模一样,但大体是一样的,现在来确认具体方案。

    注册:

            1、用户录入信息提交到上游后台

            2、上游后台接受信息,构建mq消息,发送消息,返回到tip页面

            3、tip页面等待1秒执行验证,验证是否添加成功,若成功将注册的用户数据放入到redis缓存,并返回到登录页

            4、下游后台接收mq消息,将数据持久化到mysql,并触发同步消息队列,发送同步数据到同步消息队列后结束线程

            5、下游同步消息队列监听到消息,开始同步数据到mongo

    登录:

            1、用户录入信息提交到上游后台

            2、拿着信息到redis查询是否有登录缓存,若有直接返回到main页面,若无调用下游服务接口

            3、下游服务接口接收到调用,带参到mongo查询数据并返回结果集

            4、验证结果集是否存在数据,若存在返回main页面,若不存在跳转到注册页面

    以下贴上整个流程的代码

    上游controller

@RequestMapping("UserController")@Controllerpublic class UserController {    @Resource    private IUserService userService;    @RequestMapping("toRegist.do")    public ModelAndView toRegist(User user, Model model) {        model.addAttribute("registUser", user);        return new ModelAndView("regist");    }    @RequestMapping("login.do")    public ModelAndView login(User user, Model model) {        User loginUser = this.userService.login(user);        if (null != loginUser) {            model.addAttribute("message", "登录成功");            model.addAttribute("registUser", loginUser);            return new ModelAndView("main");        } else {            return new ModelAndView("login");        }    }    @RequestMapping("regist.do")    public ModelAndView regist(User user, Model model) {        this.userService.regist(user);        model.addAttribute("message", "正在注册,请稍等……");        model.addAttribute("registUser", user);        return new ModelAndView("tip");    }    @RequestMapping("toLogin.do")    public ModelAndView toLogin(User user, Model model) {        model.addAttribute("registUser", user);        return new ModelAndView("login");    }    @RequestMapping("validateRegist.do")    @ResponseBody    public AjaxRetuen validateRegist(User user) {        if (this.userService.validateRegist(user)) {            return new AjaxRetuen("注册成功,即将返回登录页", "y");        }        return new AjaxRetuen("注册失败,请重新注册", "n");    }}

上游service

@Repositorypublic class UserServiceImpl implements IUserService {    @Resource    private QueueMessageProducer
 registQueueMessageProducer;    @Reference    private DUserService dUserService;        @Override    public void regist(User user) {        PhoneNoticeInfo noticeInfo = new PhoneNoticeInfo();        noticeInfo.setNoticeContent("Hello Word");        noticeInfo.setNoticeTitle("hello Word");        noticeInfo.setReceiver("hello");        noticeInfo.setReceiverPhone("1111111");        this.registQueueMessageProducer.sendQueue(user);    }       @Override    public boolean validateRegist(User user) {        user = this.dUserService.validateRegist(user);        if (user == null) {            return false;        }        ICache cache = SccUtilFactory.instanceCache();        cache.addCacheData("login:" + user, new CacheData(user));        return true;    }       @Override    public User login(User user) {        ICache cache = SccUtilFactory.instanceCache();        if (cache.hasCacheData("login:" + user)) {            return (User) cache.getCacheData("login:" + user);        } else {            user = this.dUserService.validateRegist(user);            if (null != user) {                cache.addCacheData("login:" + user, new CacheData(user));                return user;            }        }        return null;    }}

服务接口

public interface DUserService {    User addUser(User user);    User validateRegist(User user);}

下游服务接口实现

@Servicepublic class DUserServiceImpl implements DUserService {    @Resource    private IUserdao userdao;    @Resource    private MongoTemplate mongoTemplate;        @Override    public User addUser(User user) {        this.userdao.insertUser(user);        return user;    }        @Override    public User validateRegist(User user) {        List
 users = this.mongoTemplate.find(                new Query(Criteria.where("uname").is(user.getUname()).and("password").is(user.getPassword())),                User.class);        if (null != users && users.size() > 0) {            return users.get(0);        }        return null;    }}

注册消息处理类

public class RegistDeal extends DealJmsMessage {    @Resource    private DUserService userService;    @Resource    private QueueMessageProducer
 syncUserQueueMessageProducer;        @Override    public void dealMessage(ObjectMessage objectMessage, MessageConverter messageConverter)            throws MessageConversionException, JMSException {        User user = (User) messageConverter.fromMessage(objectMessage);        user = this.userService.addUser(user);        this.syncUserQueueMessageProducer.sendQueue(user);     }}

同步消息处理类

public class SyncUserDealJmsMessage extends DealJmsMessage {    @Resource    private MongoTemplate mongoTemplate;    @Override    public void dealMessage(ObjectMessage objectMessage, MessageConverter messageConverter)            throws MessageConversionException, JMSException {        User user = (User) messageConverter.fromMessage(objectMessage);        this.mongoTemplate.save(user);    }}

dao接口

public interface IUserdao {    Integer insertUser(User user);    User findUserByUnameAndPass(User user);}

dao mapper

INSERT INTO tab_user (uname, password) VALUES (#{uname}, #{password});

详细项目代码请看github托管,自己fork下来看

转载于:https://my.oschina.net/shyloveliyi/blog/609852

你可能感兴趣的文章
腾讯技术工程 | 腾讯AI Lab解析2017 NIPS三大研究方向,启动教授及学生合作项目...
查看>>
Ubuntu版本代号
查看>>
sel4j错误记录
查看>>
搭建android + cordova环境
查看>>
老男孩Linux50期决心书
查看>>
Petya勒索病毒疫苗出现,分分钟让电脑对病毒免疫
查看>>
实现memcmp函数
查看>>
vim编辑器的附加功能
查看>>
centos lvs+keepalived 双机实现互备且同为realserver
查看>>
centos6.5监控平台nagios搭建与配置
查看>>
[C#基础知识系列]全面解析C#中静态与非静态
查看>>
活动目录域及工作组环境外部时间源同步
查看>>
ACS USB安装引导制作
查看>>
我的友情链接
查看>>
如何下载导入以及安装Cisco路由器交换机License
查看>>
lync客户端外网登陆提示exchange连接错误
查看>>
硬盘根目录里的Msdia80.dll文件
查看>>
我的友情链接
查看>>
CSS禁止文字选中
查看>>
计算机应用一级B考试专题整理三
查看>>