【微服务核心笔记】
2023-12-29 17:51:16
一、注册中心 Nacos
Alibaba Nacos,服务提供者和服务消费者将自己的信息注册到注册中心,注册中心通过心跳机制来确保每个服务都可以正常运行,服务消费者订阅注册中心,注册中心为服务消费者推送变更信息
1、功能
- 动态服务发现
- 配置管理
2、搭建
- 创建 nacos 所需要的数据库
- 在服务器创建 nacos 配置文件 custom.env,指定模式和连接 Mysql 相关信息
- 使用 docker 创建 nacos 镜像,指明配置文件
- 访问
ip:8848/nacos
,账号密码 nacos
3、服务注册
将服务注册到 Nacos 中,让它统一管理
- 服务中添加
spring-cloud-starter-alibaba-nacos-discovery
的依赖 - 服务中添加 Nacos 配置,改服务端口其他配置相同会自动变成集群
spring:
application:
name: item-service # 服务名称
cloud:
nacos:
server-addr: 192.168.150.101:8848 # nacos地址
4、服务发现
在一个服务中得到已经注册的其他服务的信息
- 服务中添加
spring-cloud-starter-alibaba-nacos-discovery
的依赖 - 自动注入 DiscoveryClient,使用
List<ServiceInstance> instance = discoveryClient.getInstances("服务名称")
得到实例列表,然后通过ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size()));
随机得到一个服务对象,就可以使用此对象获得相关信息,如:instance.getUri()
获得服务的地址
二、远程调用 OpenFeign
Spring Cloud OpenFeign,是一个声明式的 http 客户端,是 SpringCloud 在 Eureka 公司开源的 Feign 基础上改造而来。基于 SpringMVC 的常见注解,优雅的实现 http 请求的发送
1、基础使用
- 服务中添加
spring-cloud-starter-openfeign
,spring-cloud-starter-loadbalancer
依赖 - 在启动类上添加
@EnableFeignclients
注解来开启远程调用 - 编写 OpenFeign 客户端:@FeignClient 指定要请求的服务列表;@GetMapping 指定请求方式和请求路径;方法参数指定请求参数;方法返回值指定返回后封装的类型
// 3. 编写 OpenFeign 客户端
// 向 http://item-service/items 发送一个 GET 请求,携带 ids 为请求参数,并自动将返回值处理为 List<ItemDTO>
@FeignClient("item-service")
public interface ItemClient {
@GetMapping("/items")
List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
2、开启连接池
Feign 底层默认 HttpURLConnection 实现,不支持连接池,为了更好的性能,通常使用支持连接池的实现 OKHttp、Apache HttpClient
使用
- 引入
feign-okhttp
依赖 - 在配置文件中配置:
feign:okhttp:enabled: true
# 开启 OKHttp 功能
3、最佳实践
项目中一般是将所有的远程调用封装到一个模块中,然后让其他服务引入这个模块,但是可能会出现注解扫描不到的情况,所以要在启动类的注解上添加
@EnableFeignclients(basePackages = "远程调用模块的包路径")
4、输出日志
OpenFeign 只会在 FeignClient 所在包的日志级别为 DEBUG 时,
文章来源:https://blog.csdn.net/qq_46023503/article/details/135293367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!