登录
    Technology changes quickly but people's minds change slowly.

微服务架构把握-基于SpringCloud

javaweb笔记 破玉 1691次浏览 0个评论

整体框架划分

  整个框架的搭建采用SpringCloud,自然我们的服务网关采用Zuul,客户端访问后台各个服务先通过网关进行初步权限认证(Zuul+jwt),通过网关后在进行其他菜单权限的校验,此处需要提供权限校验的服务。各个服务注册到阿里的Nacos注册中心,由Nacos进行服务注册和服务发现,各个服务的调用采用FeignClient的形式,Feign自带Ribbon 进行负载均衡配置。服务熔断采用Hystrix。后台各个服务分库分表,服务间同样采用服务调用的方式,减少各个业务模块数据表的相互管理,各个模块数据交互以服务的形式进行访问。整个后端底层是mysql、redis、mq、fastfds(分布式文件管理)等。

使用Nacos进行服务注册与发现

以下所有的Nacos配置都来源于阿里的官方Nacos文档

配置Nacos注册中心

参考(https://nacos.io/zh-cn/docs/quick-start.html
   从 https://github.com/alibaba/nacos/releases 下载安装包,解压后 cd 到bin目录下, 我们以单机模式启动,windows 下执行 cmd startup.cmd,
linux 下执行

sh startup.sh -m standalone

如果在Ubuntu 下执行报错 找不到 cluster.conf,请执行下面命令

bash startup.sh -m standalone

服务默认使用8848端口,服务启动成功后,浏览器访问 http://localhost:8848/nacos 用户名密码均为 nacos,至此 注册中心单机版配置成功。

创建项目注册到Nacos

   创建springcloud 项目,引入如下配置:

 
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.2.1.RELEASE
        

然后在启动类加入EnableDiscoveryClient 注解

@SpringBootApplication
@EnableDiscoveryClient
public class NacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class, args);
    }
}

application.yml 配置如下:


spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: nacos-magic
server:
  port: 8763

启动创建好的项目,访问Nacos控制台,在服务列表中可以看到对应的服务 nacos-magic。更改nacos-magic 服务的端口后,再启动一个服务,我们就将两个一样的服务注册到了Nacos

负载均衡的两种实现方式

一种是ribbon+restTemplate,另一种是feign。参考(https://www.fangzhipeng.com/springcloud/2017/06/02/sc02-rest-ribbon.html

ribbon+restTemplate实现负载均衡

需要提供如下服务:url以服务的形式配置,这样就可以通过服务名调用,后端的多个同名服务,实现负载均衡。

@Service
public class HiService {
    @Autowired
    RestTemplate restTemplate;
    public String hiService(String name){
        return restTemplate.getForObject("http://nacos-magic/sayHello/"+name,String.class);
    }
}

项目中需要配置RestTemplate 自动注入与负载均衡

 @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

对外提供如下controller

@RestController
@RequestMapping("/")
public class HController {
    @Autowired
    HiService hiService;
    @RequestMapping("/sayHi/{name}")
    public String sayHi(@PathVariable("name") String name){
       return hiService.hiService(name);
    }
}

Feign实现负载均衡,也是我们在用的方式

Feign默认集成了Ribbon,默认实现了负载均衡的效果。
需要提供如下接口:

@FeignClient("nacos-magic")
public interface SayHelloService {
    @RequestMapping(value="/sayHello/{name}",method = RequestMethod.GET)
    String sayHi(@PathVariable("name") String name);
}

以下是调用:

@RestController
@RequestMapping("/")
public class SayHiController {
    @Autowired
    SayHelloService sayHelloService;
    @RequestMapping("/sayHi/{name}")
    public String sayHi(@PathVariable("name") String name){
        return sayHelloService.sayHi(name);
    }
}

这样也能调用到其他服务,实现负载均衡。


华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明微服务架构把握-基于SpringCloud
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址