微服务的基础使用

微服务

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+"]";
    }
}
相关推荐
努力的小郑7 分钟前
有了TCP为什么还需要HTTP?再用RPC?这次彻底讲明白了
http·微服务·rpc
weixin_456904279 分钟前
C# 中的回调函数
java·前端·c#
程序员水自流17 分钟前
MySQL InnoDB存储引擎关键核心特性详细介绍
java·数据库·mysql
kura_tsuki24 分钟前
[Web网页] LAMP 架构与环境搭建
前端·架构
Chen不旧29 分钟前
easyexcel实现excel读取
java·excel·easyexcell
码界奇点43 分钟前
Spring Web MVC构建现代Java Web应用的基石
java·前端·spring·设计规范
绝无仅有1 小时前
某大厂跳动Java面试真题之问题与解答总结(三)
后端·面试·架构
板板正1 小时前
EasyExcel实现普通导入导出以及按模板导出excel文件
java·excel
野犬寒鸦1 小时前
从零起步学习Redis || 第十章:主从复制的实现流程与常见问题处理方案深层解析
java·服务器·数据库·redis·后端·缓存
luopandeng1 小时前
amd npt技术 对比 intel ept 技术
java·linux·网络