首页 > 其他分享 >微服务Spring Cloud17_微服务场景模拟4

微服务Spring Cloud17_微服务场景模拟4

时间:2024-04-17 13:57:07浏览次数:19  
标签:服务 service Spring consumer Cloud17 user java com itheima

首先,我们需要模拟一个服务调用的场景。方便后面学习微服务架构 

一、创建父工程

 微服务中需要同时创建多个项目,为了方便课堂演示,先创建一个父工程,然后后续的工程都以这个工程为父,实现 maven的聚合。这样可以在一个窗口看到所有工程,方便讲解。在实际开发中,每个微服务可独立一个工程。

 

  

 编写项目信息:

  

 编写保存位置:

  

 然后将 pom.xml 修改成如下(请从 资料\heima-springcloud.xml 文件中复制):

 

 这里已经对大部分要用到的依赖的版本进行了 管理,方便后续使用 

  

 

 

 

二、服务提供者

 新建一个项目user-service,对外提供查询用户的服务。 

 步骤:

  1、创建module

  2、添加依赖

  3、编写配置文件

  4、编写代码

  5、启动并测试

  1、创建module

 实现:

 1、创建module

  选中父工程:heima-springcloud 

   

  填写module信息:   

   

  注意,子模块要在父工程的下级目录:

   

 2、添加依赖

  pom.xml 文件中的内容如下: 

<?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>
        <artifactId>heima-springcloud</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima</groupId>
    <artifactId>user-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>

  项目结构: 

   

 3、编写配置文件

  创建 user-service\src\main\resources\application.yml 属性文件,这里我们采用了yaml语法,而不是 properties: 

server:
 port: 9091
spring:
 datasource:
   driver-class-name: com.mysql.jdbc.Driver
   url: jdbc:mysql://localhost:3306/springcloud
   username: root
   password: root
mybatis:
 type-aliases-package: com.itheima.user.pojo

  使用mysql图形界面工具创建 springcloud 数据库,将 资料\tb_user.sql 导入; 

 4、编写代码

  编写 user-service\src\main\java\com\itheima\user\UserApplication.java 启动类: 

package com.itheima.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.itheima.user.mapper")
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
   }
}

  编写 user-service\src\main\java\com\itheima\user\pojo\User.java 实体类: 

package com.itheima.user.pojo;
import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Table(name = "tb_user")
@Data
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
    private String userName; // 用户名
    private String password; // 密码
    private String name;// 姓名
    private Integer age;// 年龄
    private Integer sex;// 性别,1男性,2女性
    private Date birthday;// 出生日期
    private Date created;// 创建时间
    private Date updated;// 更新时间
    private String note;// 备注
}

  编写 user-service\src\main\java\com\itheima\user\mapper\UserMapper.java 

package com.itheima.user.mapper;
import com.itheima.user.pojo.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserMapper extends Mapper<User> {
}

  编写 user-service\src\main\java\com\itheima\user\service\UserService.java

 

  添加一个对外查询的接口处理器     user-service\src\main\java\com\itheima\user\controller\UserController.java     创建完上述代码后项目结构:  

 

 5、启动并测试

  启动 user-service 项目,访问接口:http://localhost:9091/user/8

   

 

三、服务调用者

 1、创建工程

  与上面类似,这里不再赘述,需要注意的是,我们调用user-service的功能,因此不需要mybatis相关依赖了。

 

 

  pom.xml文件内容如下:

 

  项目结构如下:

 

 2、编写代码

  编写启动类 consumer-demo\src\main\java\com\itheima\consumer\ConsumerApplication.java 并在其中注册RestTemplate 具体如下:

 

  创建实体类 consumer-demo\src\main\java\com\itheima\consumer\pojo\User.java

 

  编写consumer-demo\src\main\java\com\itheima\consumer\controller\ConsumerController.java,在controller中直接调用RestTemplate,远程访问user-service的服务接口:

 

  服务调用者项目结构:

 

 

 3、启动测试

  启动 consumer-demo引导启动类;因为 consumer-demo 项目没有配置端口,那么默认就是8080,我们访问:http://localhost:8080/consumer/8

   

  一个简单的远程服务调用案例就实现了。

 

四、思考问题

 简单回顾一下,刚才我们写了什么:   user-service:对外提供了查询用户的接口   consumer-demo:通过RestTemplate访问http://locahost:9091/user/{id}接口,查询用户数据存在什么问题?
  • 在consumer中,我们把url地址硬编码到了代码中,不方便后期维护
  • consumer需要记忆user-service的地址,如果出现变更,可能得不到通知,地址将失效consumer不清楚user-service的状态,服务宕机也不知道
  • user-service只有1台服务,不具备高可用性
  • 即便user-service形成集群,consumer还需自己实现负载均衡
 其实上面说的问题,概括一下就是分布式服务必然要面临的问题:
  • 服务管理
    • 如何自动注册和发现
    • 如何实现状态监管
    • 如何实现动态路由
  • 服务如何实现负载均衡
  • 服务如何解决容灾问题
  • 服务如何实现统一配置
 以上的问题,都将在SpringCloud中得到答案。

 

标签:服务,service,Spring,consumer,Cloud17,user,java,com,itheima
From: https://www.cnblogs.com/ajing2018/p/18140545

相关文章

  • 日志收集(log4j2->slf4j->阿里云日志服务SLS)
    1、log4j2的使用Java中常用的日志框架:•logback:SpringBoot默认使用的日志框架,具有自动压缩日志、支持多样化配置、不需要重启就可以恢复I/O异常等特点。•log4j2:在性能方面比logback更加优秀,使用上与之前版本log4j没什么区别(log4j基本被淘汰了,springboo......
  • 基于K8s+Docker+Openresty+Lua+SpringCloudAlibaba的高并发秒杀系统——与京东淘宝同
    ​介绍基于K8s+Docker+Openresty+Lua+SpringCloudAlibaba的高并发高性能商品秒杀系统,本系统实测单台(16核32G主频2.2GHz)openresty(nginx)的QPS可高达6w并发,如果您需要应对100w的并发,则需要100w/6w=17台openresty服务器,17台服务器同时接收并处理这100w的并发流量呢?当然是商业......
  • C:\Windows\System32\spool 目录中,这个目录是与打印相关的系统服务的默认位置。 Pr
    C:\Windows\System32\spool目录中,这个目录是与打印相关的系统服务的默认位置。作用:drivers:这个文件夹包含了打印机驱动程序文件。Windows系统使用这些驱动程序来与不同类型和品牌的打印机进行通信。PRINTERS:这个文件夹通常用于存储正在打印的文档的临时文件。当......
  • 云主机AI服务的性能测试和优化
    本文分享自天翼云开发者社区《云主机AI服务的性能测试和优化》,作者:无敌暴龙兽在云计算的时代,越来越多的人选择将AI模型部署在云主机上,以便利用云服务提供商的弹性和可扩展性。然而,仅仅将AI模型部署到云主机上并不足以保证其性能和效率。本文将介绍云主机AI服务的性能测试和优化的......
  • springboot集成spark大数据
    1、特别申明,请注意JDK版本,最好用JDK1.8,用JDK17会导致很多报错2、导入pom依赖JDK1.8直接导入spark依赖就行。<dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.13</artifactId><version>3.4.1......
  • springboot多模块项目启动经历
    springboot多模块使用@目录springboot多模块使用前言大佬把项目权限给我了,我就先下下来看看学习一下一、识别二、maven配置1.安装maven三、加载刷新总结前言大佬把项目权限给我了,我就先下下来看看学习一下一、识别项目分为母模块和多个子模块,开始idea只是识别了最外层的pom......
  • 基于SpringWeb MultipartFile文件上传、下载功能
    在Web开发中,文件上传是一个常见的功能需求。Spring框架提供了MultipartFile接口,用于处理文件上传请求。MultipartFile可以代表一个多部分文件上传请求中的一个文件,提供了一系列方法用于获取文件的各种属性和内容,使得在后端处理文件上传变得十分方便。下面我们将介绍MultipartFile......
  • IDEA2023版本创建Spring项目只能勾选17和21却无法使用Java8的完美解决方案
    参考:https://www.jb51.net/program/308256k4b.htm方案一:替换创建项目的源我们只知道IDEA页面创建Spring项目,其实是访问springinitializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为https://......
  • Command line is too long. Shorten command line for JooLunMallApiApplication or a
      在启动微服务项目的某个时候,一直启动不起来,报Commandlineistoolong.ShortencommandlineforApplicationoralsoforApplicatio,在网上查阅资料后,发现这个问题,是因为启动命令太长(就是main方法类)。  解决方法:  选择工具栏的Run并下拉选Run,之后会有个弹窗,选择......
  • MyBatis-06-Spring的SqlSession和原始区别
    DefaultSqlSession这个就不说了,SQL执行是调用执行器Executor执行SqlSessionTemplate构造函数,虽然没有立即创建SqlSession传入代理拦截器SqlSessionInterceptor,但是拦截器是一个实例内部类,可以访问到SqlSessionFactory并且SqlSessionTemplate不支持commit、rollback......