前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个综合的分布式项目之功能代码 原

一个综合的分布式项目之功能代码 原

作者头像
尚浩宇
发布2018-08-17 10:29:29
6590
发布2018-08-17 10:29:29
举报
文章被收录于专栏:杂烩

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

    注册:

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

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

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

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

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

    登录:

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

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

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

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

    以下贴上整个流程的代码

    上游controller

代码语言:javascript
复制
@RequestMapping("UserController")
@Controller
public 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

代码语言:javascript
复制
@Repository
public class UserServiceImpl implements IUserService {
    @Resource
    private QueueMessageProducer<User> 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;
    }

}

服务接口

代码语言:javascript
复制
public interface DUserService {
    User addUser(User user);
    User validateRegist(User user);
}

下游服务接口实现

代码语言:javascript
复制
@Service
public 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<User> 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;
    }

}

注册消息处理类

代码语言:javascript
复制
public class RegistDeal extends DealJmsMessage {
    @Resource
    private DUserService userService;
    @Resource
    private QueueMessageProducer<User> 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);
     }
}

同步消息处理类

代码语言:javascript
复制
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接口

代码语言:javascript
复制
public interface IUserdao {
    Integer insertUser(User user);

    User findUserByUnameAndPass(User user);
}

dao mapper

代码语言:javascript
复制
<mapper namespace="sustainable.service.dao.IUserdao">	
	<insert id="insertUser" parameterType="sustainable.common.po.User"  useGeneratedKeys="true" keyProperty="uid">
		INSERT INTO tab_user (uname, password) VALUES (#{uname}, #{password});
	</insert>
</mapper>

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/01/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档