分布式项目(dubbo框架)
具体介绍:
1、数据库搭建:mycat 代理服务器 采用双机热备的方式 数据库主从搭建高可用 、读写分离、数据同步
2、redis集群搭建:集群可同时实现海量数据存储和高可用,降低数据库的压力
3、生产者(后端服务器):例如:sso单点登录、购物车、订单、后台管理模块。
4、注册中心:zookeeper(一主两从)消费者通过服务注册表获取访问地址(ip+端口)去访问具体的服务提供者。
5、消费者(前端服务器):例如:web模块
6、nginx 代理服务器:反向代理、负载均衡,配合SwitchHosts使用。
7、用户发起请求
SOA面向服务思想:
项目结构目录:
RPC远程调用流程:
客户请求 → web模块的controller层 → common模块的service接口层 → sso/cart模块的XXXserviceImpl层和XXXmapper层
pom文件:继承、依赖、插件
1、实现SSO用户单点登录的流程:
1、web模块写controller层
@Controller // 如果返回的是json 注意方法中添加该注解@ResponseBody
@RequestMapping("/user")
public class UserController {
private static final String TICKET = "JT_TICKET";
@Reference(check = false)
private DubboUserService userService;
@Autowired
private JedisCluster jedisCluster;
//页面通用跳转
@RequestMapping("/{moduleName}")
public String moduleName(@PathVariable String moduleName){
return moduleName;
}
//注册时用户(密码、用户名、电话)入库,
@RequestMapping("/doRegister")
@ResponseBody
public SysResult doRegister(User user){
//SysResult:common模块里自定义的VO对象(1、状态码 2、提示信息 3、返回给前端的值)
//service 第三方接口. 直接rpc调用访问jt-sso中的实现类
userService.saveUser(user);
return SysResult.success();
}
//用户登录
// 需求1: 将cookie名称为 "JT_TICKET"数据输出到浏览器中,要求7天超时。并且实现"jt.com"数据共享
@RequestMapping("/doLogin")
@ResponseBody
public SysResult doLogin(User user, HttpServletResponse response){
String ticket = userService.doLogin(user);//完成用户登录操作 之后获取ticket密钥信息
if(StringUtils.isEmpty(ticket)){
//如果为null,则说明用户名或密码有问题
return SysResult.fail();
}
Cookie cookie = new Cookie("JT_TICKET",ticket); //1.创建Cookie对象
//2.设定cookie存活的时间 value=-1 关闭会话时,cookie删除。value= 0 立即删除。value= >0 设超时时间
cookie.setMaxAge(7*24*60*60);
cookie.setDomain("jt.com");//3.在jt.com的域名中实现数据共享.
cookie.setPath("/"); //一般情况下都是/
response.addCookie(cookie);//4.将数据保存到浏览器中
return SysResult.success();
}
//用户登出,删除redis和cookie,
@RequestMapping("/logout")
public String logout(HttpServletRequest request,HttpServletResponse response){
Cookie cookie = CookieUtil.getCookieByName(request,TICKET);
if(cookie != null){