微服务的基础使用

微服务

Maven的依赖冲突解决方案:

  • 路径最短原则

  • 配置优先原则

  • 破坏规则则使用排除

  • SpringBoot场景启动器starter的开发流程

    c3p0-spring-boot-starter自定义场景启动器

    test-c3p0调用自定义场景启动器

  • SpringBoot自动装配

  • SpringBoot应用启动原理

  • nacos服务治理

    • 安装
    • 启动bin/startup -m standalone
    • webUI地址为localhost:8848/nacos,其中用户nacos/nacos
    • 关闭bin/shutdown

微服务

将应用划分为若干个体量更小的服务,每个服务可以独立开发、独立部署、独立运行,服务之间可以通过轻量级通信机制进行相互调用

用户管理系统

  • 用户微服务

    mysql 复制代码
    create database test1;
    use test1;
    
    create table tbl_users(
        id bigint primary key auto_increment,
        name varchar(32) not null,
        role_id bigint
    )
  • 角色微服务

    复制代码
    create database test2;
    use test2;
    
    create table tbl_role(
        id bigint primary key auto_increment,
        name varchar(32) not null
    )

针对不同的服务当作一个独立的应用进行开发

复制代码
@RestController // 轻量级通信机制  http+json
public class UserController{
    @Autowired 
    private RestTemplate restTemplate;      //可以当作浏览器对待
    @Autowired 
    private IUserServ userService;
    @RequestMapping("/get")
    public String getUser(){
        //当前应用内部业务
        User user=userService.load(1);  //从当前应用中加载对应的1号用户信息
        Role role=restTemplate.getForObject("role服务的地址",Role.class);
        ....
    }
}

role服务的地址的问题:

Nacos应用步骤

服务提供者

1、添加依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、添加配置

properties 复制代码
spring.application.name=role-service   定义的服务名称,服务消费者是通过服务名称查找地址
spring.cloud.nacos.discovery.server-addr=localhost:8848  Nacos的地址

3、在配置类上添加注解以启动Nacos客户端

java 复制代码
@EnableDiscoveryClient  也可以直接定义在主类
@SpringBootConfiguration
public class NacosConfig {
}

Nacos

1、安装

2、 启动nacos命令startup -m standalone

3、启动服务提供者

4、在nacos的webUI可以查看localhost:8848/nacos

服务消费者

1、依赖

xml 复制代码
<dependency>    
     <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置

复制代码
spring.application.name=user-service   定义的服务名称,服务消费者是通过服务名称查找地址
spring.cloud.nacos.discovery.server-addr=localhost:8848  Nacos的地址

3、通过注解启动nacos client

复制代码
@EnableDiscoveryClient

4、可以通过nacos client查询注册在nacos中的所有对应的服务提供者

复制代码
@RestController
public class TestController {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private DiscoveryClient discoveryClient;
    @GetMapping("/test")
    public String test(String name){
//        String url="http://localhost:8070/hello?name=zhangsan"
        //从nacos根据服务名称获取对应的服务提供方的地址端口号等信息
        List<ServiceInstance> serviceInstances = discoveryClient.getInstances("hello-service");
        //从nacos种获取服务列表后需要根据某种策略获取某一个具体的服务实例---负载均衡
        Random r=new Random();
        ServiceInstance instance = serviceInstances.get(r.nextInt(serviceInstances.size()));
        System.out.println("远程服务的主机地址:"+instance.getHost());
        System.out.println("远程服务的端口号:"+instance.getPort());
        //拼接访问的URL地址
        String url=instance.getUri()+"/say?name="+name;
        System.out.println("远程服务地址:"+url);
        String res = restTemplate.getForObject(url, String.class);
        return "Consumer:["+res+"]";
    }
}
相关推荐
钱多多_qdd6 分钟前
基础篇:IoC(三):Bean实例化策略InstantiationStrategy
java·spring
float_com8 分钟前
【java基础语法】---- 综合训练
java
Dyan_csdn13 分钟前
springboot系统设计选题3
java·spring boot·后端
sheji341622 分钟前
【开题答辩全过程】以 基于Java的旅游网站的设计与开发为例,包含答辩的问题和答案
java·开发语言·旅游
ABdolphin25 分钟前
Spring-cloud 主键Eureka
java·云原生·eureka
Aesopcmc33 分钟前
Maven打包时指定输出路径、以时间戳命名包名和路径名,结合IDEA以指令脚本方式动态配置输出目录
java·自动化·maven·intellij-idea
蓝-萧1 小时前
springboot系列--自动配置原理
java·后端
学到头秃的suhian1 小时前
JVM-类加载机制
java·jvm
bobogift2 小时前
【玩转全栈】----Django基本配置和介绍
java·后端