目录
1.nacos简单部署
nacos引用的主要依赖是然后在配置文件进行注册(需要提前启动nacos插件,默认密码都是nacos)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在配置文件进行注册 (注册时必须设置服务名)
spring.application.name=shop-product
spring.cloud.nacos.server-addr=localhost:8848
然后在列表中可以看见对应的服务
服务直接可以相互调用,调用方式有三种
1.直接输入服务ip(不灵活)
/**
* @program: shop-parent3
* @description:
* @author: 大鱼
* @create: 2021-07-07 19:36
**/
@RestController
public class OrderController {
@Resource
OrderMapper orderMapper;
@Resource
RestTemplate restTemplate;
@GetMapping("insert")
private String insertit(Integer pid, Integer num) {
Order order = new Order();
Product prduct = restTemplate.getForObject("http://localhost:8081/product/byid/"+pid,Product.class);
order.setUsername("xxxx");
orderMapper.insert(order);
return "ok";
}
}
2.从nacos注册中心获取(不符合习惯)
@RestController public class OrderController1 { @Resource OrderMapper orderMapper; @Resource RestTemplate restTemplate; @Resource DiscoveryClient discoveryClient; @GetMapping("insert1") private String insertit(Integer pid, Integer num) { Order order = new Order(); List<ServiceInstance> instances = discoveryClient.getInstances("shop-product"); ServiceInstance instance = instances.get(0); Product prduct = restTemplate.getForObject(instance.getUri()+"/product/byid/"+pid,Product.class); order.setUsername("xxxx"); orderMapper.insert(order); return "ok"; } }
用DiscoveryClient类获取注册中心的集群,然后获取路径
同时在主启动类加入RestTemplate引用类
@SpringBootApplication
@MapperScan(basePackages = "com.dayu.mapper")
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.引用openfeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
新建一个接口加注解并且指定注册中心想要获取的服务名以及该服务的方法
@FeignClient(value = "shop-product")
@RequestMapping("product")
public interface Myopen {
@GetMapping("byid/{id}")
public Product getit(@PathVariable Integer id);
}
开启注解 @EnableFeignClients生效和 @LoadBalanced(负载均衡)
@SpringBootApplication
@MapperScan(basePackages = "com.dayu.mapper")
@EnableFeignClients
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
在配置文件可声明服务负载均衡的方式
shop-product: # 这里使用服务的名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #使用的的负载均衡策略
4.配置文件
微服务的配置文件可以从注册中心进行获取,
1)首先引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
首先定义一个bootstrap.yml文件
#资源配置文件有优先级pro>yaml>yml
#从nacos 获取资源配置文件
spring:
application:
name: shop-product#微服务名
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml#文件后缀可变
根据服务名和相应的文件后缀获取配置文件,与配置文件无异
2.网关设置
所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服 务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控(黑白名单)、路由转发等等。
首先引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
在配置文件声明调用微服务信息
spring:
cloud:
gateway:
routes:
- id: shop-product
uri: lb://shop-product/ #负载均衡服务名ip
order: 0
predicates:
- Path=/product/** #断言
# - Age=18,60
filters: #过滤器
- SetStatus=250 # - StripPrefix=1