Springcloud Alibaba微服务之注册发现和远程调用
Springcloud AlibabaSpringCloud. Alibaba的优势:阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用成套的产品搭配完善的可视化界面给开发运维带来极大的便利搭建简单,学习曲线低。结合SpringCloud Alibaba我们最终的技术搭配方案:SpringClaud.Alilbaba.-Nacos:注册中心(服务发现/注册)SpringCloud
Springcloud Alibaba
SpringCloud. Alibaba的优势:
阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用
成套的产品搭配完善的可视化界面给开发运维带来极大的便利
搭建简单,学习曲线低。
结合SpringCloud Alibaba我们最终的技术搭配方案:
- SpringClaud.Alilbaba.-Nacos:注册中心(服务发现/注册)
- SpringCloud Alibaba-Nacos:配置中心(动态配置管理)
- SpringCloud-Ribbon:负载均衡
- SpringCloud-Feign:声明式HTTP客户端(调用远程服务)
- SpringCloud Alibaba- Sentinel:服务容错(限流、降级、熔断)
- SpringCloud-Gateway:API网关(webflux编程模式)
- SpringClaud- Sleuth:调用链监控
- SpringCloud Alibaba.- Seata:原Fescar,即分布式事务解决方案
1. Nacos 注册中心/发现
下载nacos服务器, 以下实验将==startup.cmd ==
set MODE=“standalone” (原来是用于发布环境的集群状态)
- 首先在公共的common-pom.xml导入依赖,
- 然后properties中指向注册中心地址,端口
<!-- 服务的注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencyies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
===========application.yml======
spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
- 使用@EnableDiscoveryClient 注解开启服务注册于发现功能
- 启动nacos,解压目录后的bin/startup.cmd,然后打开浏览器输入:
http://localhost:8848/nacos - 写服务名给注册 :
spring:
application:
name: gulimall-coupon
- 运行服务后,再刷新浏览器可看到
2. OpenFeign 远程调用
2.1 简介
Feign是一个声明式的HTTP客户端,它的目的就是让远程调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
Feign整合了Ribbon(负载均衡)和Hystrix(服务熔断),可以让我们不再需要显式地使用这两个组件。
SpringCloudFeign.在NetflixEeign.的基础上扩展了对SpringlMMcC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了SpringCloudRibbon.自行封装服务调用客户端的开发量。
2.2 使用
- 引入依赖,一般创建项目就导入这个模块和 Nacos注册中心发现
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 实例一个coupon服务(在Controller中模拟一个),member服务去调用该服务
步骤如下:
1.引入open-feign,nacos依赖
2.编写一个接口,告诉springcloud 这个接口要远程调用谁的服务
1).声明接口的每一个方法都是调用哪个远程服务的那个请求
3.开启远程调用功能
==========coupon Controller=======
@RequestMapping("/member/list")
public R membercoupons(){
CouponEntity entity = new CouponEntity();
entity.setCouponName("满100减10");
return R.ok().put("coupon",Arrays.asList(entity));
}
===========member Feign===========
package com.atguigu.gulimall.memeber.feign;
import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient("gulimall-coupon") //声明式远程调用
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R membercoupons();
}
===========member Application.java======
@EnableFeignClients(basePackages = "com.atguigu.gulimall.memeber.feign")
@EnableDiscoveryClient
@SpringBootApplication
=========member Controller=======
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("/coupons")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三");
R membercoupons = couponFeignService.membercoupons();
return R.ok().put("member",memberEntity).put("coupon",membercoupons.get("coupon"));
}
更多推荐
所有评论(0)