传统SSH项目集成到Springcloud

Posted 程序员超时空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传统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<br>
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的主要内容,如果未能解决你的问题,请参考以下文章

非java异构服务如何集成到SpringCLoud集群中

SpringCloud 集成 Eureka服务 部署阿里云服务器

Spring Cloud微服务云架构 - 集成项目简介

Spring Cloud分布式微服务架构—集成项目简介

Spring Cloud微服务分布式云架构-集成项目

Spring Cloud微服务分布式云架构-集成项目