Docker Kubernetes 微服务容器化实践(二) 2.1 微服务实战 thrift篇 ②--用户服务Thrift

本文主要是介绍Docker Kubernetes 微服务容器化实践(二) 2.1 微服务实战 thrift篇 ②--用户服务Thrift,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

目录

1)API接口定义 

代码目标

接口定义实现

2)实现类接口


 

  • 1)API接口定义 

  1. 这里是api接口定义代码内容
  • 代码目标

  • 接口定义实现

  1. 在microservice项目中创建 user-thrift-service-api 模块
  2. user-thrift-service-api/pom.xml添加thrift版本build插件
  3. user-thrift-service-api/thrift/user_service.thrift 创建实体接口
    namespace java com.imooc.thrift.userstruct UserInfo {1:i32 id,2:string username,3:string password,4:string realName,5:string mobile,6:string email,7:string intro,8:i32 stars
    }service UserService {UserInfo getUserById(1:i32 id);UserInfo getTeacherById(1:i32 id);UserInfo getUserByName(1:string username);void regiserUser(1:UserInfo userInfo);}
  4. gen-code代码生成
    #!/usr/bin/env bash
    thrift --gen java -out ../src/main/java user_service.thrift

     

  • 2)实现类接口

  1. 在microservice项目中创建 user-thrift-service 模块
  2. user-thrift-service/src/main/java添加UserServiceImpl,前提先要导入不然找不到
  3. 创建数据库 docker启动mysql (略)
  4. https://mvnrepository.com 添加对应依赖 完整依赖如下:
    <?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.imooc</groupId><artifactId>user-thrift-service</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId><version>0.10.0</version></dependency><dependency><groupId>com.imooc</groupId><artifactId>user-thrift-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.44</version></dependency><dependency><groupId>com.imooc</groupId><artifactId>message-thrift-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
    </project>
  5. application.properties 配置数据源 
    service.name=user-thrift-service
    service.port=7911#数据源的配置
    spring.datasource.url=jdbc:mysql://192.168.1.8:3306/db_user
    spring.datasource.username=root
    spring.datasource.password=aA111111
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
  6.  microservice/user-thrift-service/src/main/java/com/imooc/user/mapper/UserMapper.java
    package com.imooc.user.mapper;import com.imooc.thrift.user.UserInfo;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;/*** Created by Michael on 2017/10/28.*/
    @Mapper
    public interface UserMapper {@Select("select id,username, password, real_name as realName," +"mobile, email from pe_user where id=#{id}")UserInfo getUserById(@Param("id")int id);@Select("select id,username, password, real_name as realName," +"mobile, email from pe_user where username=#{username}")UserInfo getUserByName(@Param("username")String username);@Insert("insert into pe_user (username, password, real_name, mobile, email)" +"values (#{u.username}, #{u.password}, #{u.realName}, #{u.mobile}, #{u.email})")void registerUser(@Param("u") UserInfo userInfo);@Select("select u.id,u.username,u.password,u.real_name as realName," +"u.mobile,u.email,t.intro,t.stars from pe_user u," +"pe_teacher t where u.id=#{id} " +"and u.id=t.user_id")UserInfo getTeacherById(@Param("id")int id);
    }
    

     

  7.  microservice/user-thrift-service/src/main/java/com/imooc/user/service/UserSerivceImpl.java
    package com.imooc.user.service;import com.imooc.thrift.user.UserInfo;
    import com.imooc.thrift.user.UserService;
    import com.imooc.user.mapper.UserMapper;
    import org.apache.thrift.TException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;/*** Created by Michael on 2017/10/28.*/
    @Service
    public class UserSerivceImpl implements UserService.Iface {@Autowiredprivate UserMapper userMapper;@Overridepublic UserInfo getUserById(int id) throws TException {return userMapper.getUserById(id);}@Overridepublic UserInfo getTeacherById(int id) throws TException {return userMapper.getTeacherById(id);}@Overridepublic UserInfo getUserByName(String username) throws TException {return userMapper.getUserByName(username);}@Overridepublic void regiserUser(UserInfo userInfo) throws TException {userMapper.registerUser(userInfo);}
    }
    

     

  8.   microservice/user-thrift-service/src/main/java/com/imooc/user/thrift/ThriftServer.java
    package com.imooc.user.thrift;import com.imooc.thrift.user.UserService;
    import org.apache.thrift.TProcessor;
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.server.TNonblockingServer;
    import org.apache.thrift.server.TServer;
    import org.apache.thrift.transport.TFramedTransport;
    import org.apache.thrift.transport.TNonblockingServerSocket;
    import org.apache.thrift.transport.TTransportException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;/*** Created by Michael on 2017/10/28.*/
    @Configuration
    public class ThriftServer {@Value("${service.port}")private int servicePort;@Autowiredprivate UserService.Iface userService;@PostConstructpublic void startThriftServer() {TProcessor processor = new UserService.Processor<>(userService);TNonblockingServerSocket socket = null;try {socket = new TNonblockingServerSocket(servicePort);} catch (TTransportException e) {e.printStackTrace();}TNonblockingServer.Args args = new TNonblockingServer.Args(socket);args.processor(processor);args.transportFactory(new TFramedTransport.Factory());args.protocolFactory(new TBinaryProtocol.Factory());TServer server = new TNonblockingServer(args);server.serve();}
    }
    

     

  9.  注意必须创建完ThriftServer.java 才能启动ServiceApplication,不然启动失败

这篇关于Docker Kubernetes 微服务容器化实践(二) 2.1 微服务实战 thrift篇 ②--用户服务Thrift的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/492717

相关文章

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1