微服务使用步骤

Maven的依赖冲突解决方案:

  • 路径最短原则
  • 配置优先原则
  • 破坏规则则使用排除

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

复制代码
   c3p0-spring-boot-starter自定义场景启动器

    test-c3p0调用自定义场景启动器
  • SpringBoot自动装配
  • SpringBoot应用启动原理
  • nacos服务治理
    安装
    启动bin/startup -m standalone
    webUI地址为localhost:8848/nacos,其中用 户nacos/nacos
    关闭bin/shutdown

微服务

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

用户管理系统

用户微服务

xml 复制代码
 create database test1;
use test1;

create table tbl_users(
	id bigint primary key auto_increment,
    name varchar(32) not null,
    role_id bigint
)

角色微服务

xml 复制代码
create database test2;
use test2;

create table tbl_role(
	id bigint primary key auto_increment,
    name varchar(32) not null
)

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

下面来写Controller里的具体实现

xml 复制代码
@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服务的地址的问题:

复制代码
方法1:使用绝对路径,例如http://localhost:7081/roles/1。问题是role服务的地址可能会出现调整,或者role服务由于频繁访问需要多节点部署
针对方法1的缺陷引入中间件nacos作为注册中心。
    当所有的服务提供者,例如role服务,启动时都会自动向nacos注册自己的信息,例如服务的名称,自己的地址和自己对外提供服务的端口号等
    当服务消费者需要调用服务时,可以向nacos查询对应服务名称的提供者地址列表,例如通过role-service服务名获取到所有的role服务的地址列表

Nacos应用步骤

服务提供者

1、添加依赖

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

2、添加配置

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

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

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

Nacos

1、安装

2、 启动nacos命令startup -m standalone

3、启动服务提供者

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

服务消费者

1、依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery

2、配置

spring.application.name=user-service 定义的服务名称,服务消费者是通过服务名称查找地址

spring.cloud.nacos.discovery.server-addr=localhost:8848 Nacos的地址

3、通过注解启动nacos client

@EnableDiscoveryClient

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

xml 复制代码
@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+"]";
    }
}
相关推荐
皮皮林5511 天前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_456904271 天前
Spring Boot 用户管理系统
java·spring boot·后端
奔跑吧邓邓子1 天前
【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战
java·spring boot·实战·web开发·接口设计
茶本无香1 天前
深入理解Spring Boot的EnvironmentPostProcessor:环境处理的黑科技
spring boot
奔跑吧邓邓子1 天前
【Java实战㉝】Spring Boot实战:从入门到自动配置的进阶之路
java·spring boot·实战·自动配置
ONLYOFFICE1 天前
【技术教程】如何将ONLYOFFICE文档集成到使用Spring Boot框架编写的Java Web应用程序中
java·spring boot·编辑器
眠りたいです1 天前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器
叫我阿柒啊1 天前
Java全栈开发工程师的实战面试经历:从基础到微服务
java·微服务·typescript·vue·springboot·前端开发·后端开发
Aczone281 天前
硬件(五) 存储、ARM 架构与指令系统
arm开发·嵌入式硬件·架构
闲看云起1 天前
从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型
gpt·架构·llama