使用Sidecar将koa2引入Spring Cloud
mkdir koa2&&cd koa2&&npm init -y
npm install koa koa-router superagent --save
touch app.js
const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const router = new Router()
var request = require('superagent');
const SERVICE = 'compute-service'
// 调取其他服务
router.get('/hi',async ctx => {
var res=await request.get('http://localhost:8003/compute-service/hi?name=forezp').then(function(res){
console.log(res.status,res.text);return res;})
ctx.body=res.text;
})
//服务健康指标接口
router.get('/health', ctx => {
ctx.body ={ status: 'UP'}
})
var books=[{"id":1,"name":"book1"},{"id":2,"name":"book2"},{"id":3,"name":"book3"}]
// 提供服务
router.get('/books/:id', ctx => {
console.log(ctx.params.id);
ctx.body =books;
})
app .use(router.routes()).use(router.allowedMethods());
app.listen(8004)
console.log(`koa2 已启动 , 端口 : 8004`)
node app.js
http://localhost:8004/books/1
http://localhost:8004/hi
<artifactId>demo_koa2</artifactId>
<packaging>jar</packaging>
<name>koa2</name>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-sidecar</artifactId>
</dependency>
</dependencies>
@SpringBootApplication
@EnableSidecar
public class SidecarApplication {
public static void main(String[] args) {
SpringApplication.run(SidecarApplication.class, args);
}
}
spring.application.name=koa2
server.port=8003
eureka.client.serviceUrl.defaultZone=http://admin:123@localhost:1111/eureka/
#eureka.instance.hostname=localhost
#eureka.instance.metadata-map.instanceId=${spring.application.name}:${spring.application.instance_id:${random.value}}
#eureka.instance.instance-id=
#eureka.instance.prefer-ip-address=true
eureka.instance.lease-expiration-duration-in-seconds=1
eureka.instance.lease-renewal-interval-in-seconds=1
eureka.client.fetchRegistry= true
eureka.client.registry-fetch-interval-seconds=1
# http://${server.port}/info 显示的内容
info.description= Spring Cloud +koa2
sidecar.port=8004
sidecar.home-page-uri= http://localhost:${sidecar.port}/
sidecar.health-uri= http://localhost:${sidecar.port}/health
hystrix.command.default.execution.timeout.enabled= false
http://localhost:8003/hosts/koa2
@FeignClient(value = "koa2")
public interface KOAClient {
@RequestMapping(method = RequestMethod.GET, value = "/books/{id}")
public List<Object> findBooks(@RequestParam("id") String id);
}
@RestController
public class KOAController {
@Autowired
KOAClient client;
// http://localhost:3344/findBooks
@RequestMapping(value = "/findBooks", method = RequestMethod.GET)
public List<Object> books() {
return client.findBooks("10");
}
}
http://localhost:3344/findBooks