微服务的基础使用

微服务

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+"]";
    }
}
相关推荐
ok!ko1 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589361 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰2 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没3 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
编程、小哥哥3 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
IT学长编程4 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
韩楚风4 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
莹雨潇潇4 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码4 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端