淘淘商城 - day10 - 课堂笔记

更新时间:2023-09-20 21:12:01 阅读量: 医药卫生 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 今日大纲

1、 Dubbo入门学习

2、 使用dubbo优化单点登录系统

2. 系统间服务调用方式

2.1. 浏览器直接访问

浏览器发起请求,通过ajax或jsonp方式请求:

2.2. Httpclient方式

系统与系统之间通过Httpclient发起http请求来请求数据:

http协议是短连接。

2.3. RPC方式

采用长连接方式。

3. 单点系统中存在的问题

在单点登录系统中的功能中,根据token查询用户信息的功能对系统性能要求最高,如果我们想单独调整该功能的性能是不可能的,因为该功能和其它的功能耦合再一起。

要想单独优化该功能的性能就必须把该功能单独出来,我们就可以借助与dubbo框架完成。

4. Dubbo入门

具体参考课前资料中的《dubbo入门教程.docx》

5. 使用dubbo优化单点系统的查询功能

5.1. 创建taotao-sso-query-api工程 5.1.1. 创建maven工程

该工程定义查询接口。

5.1.2. 导入依赖

xsi:schemaLocation=\http://maven.apache.org/xsd/maven-4.0.0.xsd\> 4.0.0

com.taotao.parent taotao-parent 0.0.1-SNAPSHOT

com.taotao.sso.query

taotao-sso-query-api 1.0.0-SNAPSHOT

com.taotao.common taotao-common 1.0.0-SNAPSHOT

5.1.3. 将taotao-sso中的User对象拷贝到该工程

拷贝代码并且做一些修改,将jpa的注解删除:

package com.taotao.sso.query.bean;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonIgnore;

publicclass User {

private Long id;

private String username;

@JsonIgnore

// 将对象序列化json字符串时忽略该字段 private String password;

private String phone;

private String email;

private Date created;

private Date updated;

public Long getId() { returnid; }

publicvoid setId(Long id) { this.id = id; }

public String getUsername() { returnusername; }

publicvoid setUsername(String username) { this.username = username; }

public String getPassword() { returnpassword; }

publicvoid setPassword(String password) { this.password = password; }

public String getPhone() { returnphone; }

publicvoid setPhone(String phone) { this.phone = phone; }

public String getEmail() { returnemail; }

publicvoid setEmail(String email) { this.email = email; }

public Date getCreated() { returncreated; }

publicvoid setCreated(Date created) { this.created = created; }

public Date getUpdated() { returnupdated; }

publicvoid setUpdated(Date updated) { this.updated = updated; } }

5.1.4. 定义服务接口

package com.taotao.sso.query.api;

import com.taotao.sso.query.bean.User;

publicinterface UserQueryService { /**

* 根据token查询User对象

*

* @return */

public User queryUserByToken(String token); }

5.2. 创建taotao-sso-query-service 5.2.1. 创建maven工程

5.2.2. 导入依赖

xsi:schemaLocation=\http://maven.apache.org/xsd/maven-4.0.0.xsd\> 4.0.0

com.taotao.parent taotao-parent 0.0.1-SNAPSHOT

com.taotao.sso.query

taotao-sso-query-service 1.0.0-SNAPSHOT war

com.taotao.common taotao-common 1.0.0-SNAPSHOT

com.taotao.sso.query

taotao-sso-query-api 1.0.0-SNAPSHOT

spring

org.springframework

-->

org.apache.tomcat.maven tomcat7-maven-plugin

8087 /

5.2.3. 编写配置文件

applicationContext-redis.xml:

applicationContext.xml:

taotao-sso-query-servlet.xml:

5.2.4. 编写web.xml

xmlns=\

xsi:schemaLocation=\http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\ id=\version=\>

taotao-sso-query-service

contextConfigLocation

classpath:spring/applicationContext*.xml

org.springframework.web.context.ContextLoaderListener

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding UTF8

encodingFilter /*

taotao-sso

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring/taotao-sso-query-servlet.xml

1

taotao-sso /

index.html

5.3. 编写UserQueryService的实现

package com.taotao.sso.query.service;

import org.apache.commons.lang3.StringUtils; import

org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import com.fasterxml.jackson.databind.ObjectMapper; import com.taotao.common.service.RedisService; import com.taotao.sso.query.api.UserQueryService; import com.taotao.sso.query.bean.User;

@Service

publicclass UserQueryServiceImpl implements UserQueryService {

@Autowired

private RedisService redisService;

privatestaticfinal String REDIS_KEY = \;

privatestaticfinal Integer REDIS_TIME = 60 * 30;

privatestaticfinal ObjectMapper MAPPER = new ObjectMapper();

@Override

public User queryUserByToken(String token) { String key = REDIS_KEY + token; try {

String jsonData = this.redisService.get(key); if (StringUtils.isEmpty(jsonData)) { // 登录超时 returnnull; }

// 重新刷新用户的生存时间

this.redisService.expire(key, REDIS_TIME); returnMAPPER.readValue(jsonData, User.class); } catch (Exception e) { e.printStackTrace(); } returnnull; } }

5.4. 实现RESTful web service

package com.taotao.sso.query.controller;

import

org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import

org.springframework.web.bind.annotation.PathVariable; import

org.springframework.web.bind.annotation.RequestMapping; import

org.springframework.web.bind.annotation.RequestMethod;

import com.taotao.sso.query.api.UserQueryService;

本文来源:https://www.bwwdw.com/article/ap7h.html

Top