原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『高级篇』docker之开发课程EdgeService(16)

课程的edgeService依赖于课程服务的dubbo服务,对外提供的restAPI,跟用户的EdgeService有点类似,只是一个调用的是thrift,一个调用的是dubbo,比较特殊的是课程的EdgeService需要用户登录后才可以访问,如果没有登录的话,需要跳转到登录系统才可以访问。源码:github.com/limingios/m…

新建模块course-edge-servce

  • pom增加依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.idig8</groupId><artifactId>course-edge-service</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.idig8</groupId><artifactId>course-dubbo-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.idig8</groupId><artifactId>user-edge-service-client</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>
复制代码
  • controller 调用course-dubbo-service-api 中的接口
package com.idig8.course.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.idig8.course.dto.CourseDTO;
import com.idig8.course.service.ICourseService;
import com.idig8.thrift.user.dto.UserDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.List;/*** Created by Michael on 2017/11/4.*/
@Controller
@RequestMapping("/course")
public class CourseController {@Referenceprivate ICourseService courseService;@RequestMapping(value = "/courseList", method = RequestMethod.GET)@ResponseBodypublic List<CourseDTO> courseList(HttpServletRequest request) {UserDTO user = (UserDTO)request.getAttribute("user");System.out.println(user.toString());return courseService.courseList();}
}复制代码
  • 增加filter组件
package com.idig8.course.filter;import com.idig8.thrift.user.dto.UserDTO;
import com.idig8.user.client.LoginFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Created by liming.*/
@Component
public class CourseFilter extends LoginFilter {@Value("${user.edge.service.addr}")private String userEdgeServiceAddr;@Overrideprotected String userEdgeServiceAddr() {return userEdgeServiceAddr;}@Overrideprotected void login(HttpServletRequest request, HttpServletResponse response, UserDTO userDTO) {request.setAttribute("user", userDTO);}
}复制代码
  • 启动类
package com.idig8.course;import com.idig8.course.filter.CourseFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;import java.util.ArrayList;
import java.util.List;/*** Created by liming*/
@SpringBootApplication
public class ServiceApplication {public static void main(String args[]) {SpringApplication.run(ServiceApplication.class, args);}@Beanpublic FilterRegistrationBean filterRegistrationBean(CourseFilter courseFilter ) {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(courseFilter);List<String> urlPatterns = new ArrayList<String>();urlPatterns.add("/*");filterRegistrationBean.setUrlPatterns(urlPatterns);return filterRegistrationBean;}
}复制代码
  • application.properties
server.port=8081#dubbo config
spring.dubbo.application.name=course-service
spring.dubbo.registry.address=zookeeper://47.98.183.16:2181
spring.dubbo.scan=com.idig8.courseuser.edge.service.addr=127.0.0.1:8082
复制代码

业务流程梳理

  1. 课程EdgeService 依赖用户EdgeService服务,Thrift用户服务,课程服务。
  2. 课程 EdgeService pom 依赖了用户登录user-edge-service-client,user-edge-service-client用于检测用户是否登录功能。需要调用用户的服务。
  3. 当用户完成登录后,课程EdgeService 访问课程服务,获取课程的列表信息。
  4. 课程EdgeService 依赖用户EdgeService服务,Thrift用户服务登录控制,登录后的跳转功能。
  5. 课程EdgeService 依赖与course-dubbo-service-api服务,用于获取课程信息和用户的课程信息。

梳理下dubbo的思路

  1. 建立对应的api项目定义方法。最终提供一个jar包供调用方和服务提供方使用。
  2. 服务实现方引用api项目,实现里面的功能,提供端口,名称,地址,zookeeper监控中心。
  3. 服务调用方引用api项目,引用zookeeper的监控中心发现服务。直接调用服务就可以用服务实现方的方法了。

程序演示

  • 启动服务(按照顺序)
  1. user-thrift-service
  2. user-edge-service
  3. course-dubbo-service
  4. course-edge-service
  • 界面演示
  1. 访问http://127.0.0.1:8081 自动跳转到http://127.0.0.1:8082/user/login
  2. 登录获取到token
    3.访问地址http://127.0.0.1:8081/course/courseList?token=ux4g5z98mowv0qr6r6e6ietdo00nh0vl

PS:微服务跟之前说的一样就是互相通过RPC的方式进行通信,之间有自己的数据库,只是RPC暴露接口的方式来获取其他的微服务之间的数据。

『高级篇』docker之开发课程EdgeService(16)相关推荐

  1. 『高级篇』docker之开发用户服务EdgeService(13)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发用户服务EdgeService(13) 上一节开发了用户服务,即将开发的是用户服务EdgeServ ...

  2. 『高级篇』docker之APIGateway(17)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之APIGateway(17) 这次说最后一个模块APIGateway,他的功能就是将我们客户端的请求统 ...

  3. 『高级篇』docker容器来说什么是微服务(三)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker容器来说什么是微服务(三) 上一节说了单体架构,单体架构也无法适应我们的服务,来说说微服务,看能否解决单 ...

  4. 『高级篇』docker容器来说微服务优势和不足(四)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker容器来说微服务优势和不足(四) 来看看微服务有哪些优势和不足. 优势 独立性 从构建部署,扩容收容,容错 ...

  5. 『高级篇』docker之DockerSwarm的集群环境搭建(28)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之DockerSwarm的集群环境搭建(28) 上次了解了docker Swarm,这次一起动手操作,搭 ...

  6. 『高级篇』docker之安全认证kubernetes命令熟悉(40)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之安全认证kubernetes命令熟悉(40) 安全版的kubernetes集群我们部署完成了. 下面我 ...

  7. C++轻量级微服务_『高级篇』docker容器来说什么是微服务(三)

    上一节说了单体架构,单体架构也无法适应我们的服务,来说说微服务,看能否解决单体架构的问题. 什么是微服务 最近两,三年才出现的新名词,虽然时间还不是很长,几乎每个软件从业人员对它有影响,也都通过微服务 ...

  8. 『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之CI/CD持续集成-项目生成镜像(76) 开始想用docker registry做私有镜像库,后来放弃 ...

  9. 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81) 之前一直用的原生的centos7的源镜像安装虚拟机,然 ...

最新文章

  1. iOS使用支付宝支付步骤
  2. python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
  3. NYOJ 906 杨辉三角
  4. 为何终端防护对ICS如此重要
  5. OAuth2.0授权码模式学习
  6. 服务器自动运行python_在虚拟主机中安装了python程序,如何使它在服务器上自动运行?...
  7. Python画图库Turtle库详解篇
  8. OSPF 传播默认路由
  9. css3:box-shadow
  10. socket状态不对是什么意思_无极状态,“太极状态”“无极生太极”都是什么意思?...
  11. MFC 多字节和UNICODE的相互转换(解决中文utf8-ASCNII乱码问题)
  12. dcm4che操作dcm文件
  13. 符合应急监管要求的危化品企业双重预防数字化系统
  14. 运维常用工具命令/知识总结
  15. 网上打印纳税申报表等预览有网格打印不显示
  16. MSELoss() 函数
  17. 离散冲激函数matlab,表示信号系统的matlab函数工具箱.doc
  18. 专家观点——唐福林谈Redis应用实践
  19. GPS定位(五)-高斯投影正反算C程序
  20. 某校2019专硕编程题-排序

热门文章

  1. 全球及中国高速公路行业运营管理模式与经营效益分析报告2022版
  2. 全球及中国石墨烯行业发展格局及投资盈利分析报告2021年版
  3. 全球及中国智能音箱市场规模产值及发展机遇研究报告2021-2027年
  4. openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题
  5. SQL SERVER 2000安装遇到的问题小汇总(转载)
  6. Could not write JSON: Infinite recursion (StackOverflowError);
  7. lazyload.js详解
  8. 详解HashMap的内部工作原理
  9. 静态连接库、动态链接库
  10. VMWare下的DOS与宿主机的文件共享