微服务的基础使用

微服务

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+"]";
    }
}
相关推荐
Dawson Zhu9 分钟前
面向AI自动化分析的数据仓库建模实践
人工智能·语言模型·架构·制造
黄焖鸡能干四碗18 分钟前
信息安全保障方案(Word文件)
大数据·网络·人工智能·架构·区块链
counting money1 小时前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring
AI枫林晚1 小时前
DeepSeek Harness 功能与特性解析:一个“一切皆插件“的 Agent 运行时
架构
晴天161 小时前
DeepSeek Harness 插件开发:从零到跑起来-Day18
ai·架构·deepseek
原野池予1 小时前
深入Java集合框架:数组与List互转底层原理剖析(JDK 8)
java·数据结构·list
刘立军1 小时前
异常与统一封装架构:规范统一返回值、全局异常与参数校验
架构·ai编程
Java成神之路-1 小时前
深入理解 HashMap 扩容时机:JDK 7 vs JDK 8 的设计差异与取舍
java·juc
李冰然1 小时前
深入Java集合框架:数组与List互转底层原理剖析(JDK 8)
java
竹枝溪2 小时前
MySQL进阶:约束、多表设计、多表查询与事务
java·数据库·mysql·事务·子查询·acid·多表查询