微服务的基础使用

微服务

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+"]";
    }
}
相关推荐
颜如玉1 小时前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
程序员的世界你不懂2 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年2 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
程序员不迷路3 小时前
湖仓一体学习-数据架构演进路线
架构
gb42152873 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
曾经的三心草3 小时前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
Metaphor6923 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java·经验分享·word
ChinaRainbowSea3 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
stormsha3 小时前
飞算JavaAI炫技赛电商系统商品管理模块的架构设计与实现
java·架构·鸿蒙系统
minh_coo3 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea