传统SSH项目集成到Springcloud

通过sidecar模式,将ssh、或非java的web应用接入springcloud集群上。

1、独立出一个springboot,用于sidecar。

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

    application.yml:

server:
  port: 5678
spring:
  application:
    name: sidecar
sidecar:
  # 配置接入web的端口
  port: 8090
  home-page-uri: http://localhost:${sidecar.port}/sshweb
  # 配置接入web的健康检查rest接口,sidecar将请求该url,用以确定接入应用是否存活.
  health-uri: http://localhost:${sidecar.port}/sshweb/api/health/status

2、接入web应用自行实现该rest方法

@RequestMapping(value = "/api/health/status", method = RequestMethod.GET)
@ResponseBody
public String status() { return {\"status\":\"UP\"}; }

security配置文件上,将该rest接口作为非拦截项目

3、springboot访问接入web项目时,使用Feign方式

@FeignClient(name = "sidecar")
public interface  SidecarDemoFeignClient {
    @RequestMapping("/sshweb/api/boottest/get")
    public String get(@RequestParam("name") String name);
}
4、接入项目访问spring-boot-client的方法

HttpClientUtil.synchGet(new URI("http://localhost:5678/springboot-service-id/api/demo/invoke"));

接入项目请求springboot-client应用时,host和port配置为sidecar的,请求会经由sidecar进行请求转接到对应的boot-client上。

假定springboot-service-id上有如下应用

@RequestMapping("/api/invoke/web")
@ResponseBody
public String invokeByNormalWeb() {
    return "这是个神马";
}

5、负载还是有点问题。

如果接入应用非java应用、或者由于版本过低无法引用DiscoveryManager来获取eureka上的服务器列表的话,甚至于eurekaserver屏蔽了服务列表的rest接口,那么只能使用nginx等反向代理工具,形成web项目<->nginx-<->sidecar模式了。如果eurekaserver没屏蔽服务列表获取的rest接口,自己做个balance选择器也没毛病


你可能感兴趣的:(传统SSH项目集成到Springcloud)