本文分为四个部分来讲述基于sping-cloud、spring-boot搭建的日志采集服务。本文中所用到的依赖包皆通过maven下载。
第一部分、服务注册中心搭建
首先、新建名为Eurke-Server的maven工程。用来做服务注册中心。具体pom内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springcloud-server</groupId>
<artifactId>com.asiainfo.springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
</dependencies>
</project>
第二步、进入/resource目录并在目录下新建bootstrap.yml、application.yml文件。
编辑模式打开bootstrap.yml写入如下内容:
spring:
application:
name: eureka-server
cloud:
config:
uri: ${CONFIG_SERVER_URL:http://localhost:8888}
编辑模式打开application.yml写入如下内容:
server:
port: 8761 #服务端口
eureka:
client:
registerWithEureka: false #是否将自己注册进注册中心
fetchRegistry: false # 此客户端是否获取eureka服务器注册表上的注册信息,默认为true
server:
waitTimeInMsWhenSyncEmpty: 0 #在Eureka服务器获取不到集群里对等服务器上的实例时,需要等待的时间,单位为毫秒,默认为1000 * 60 * 5
第三步、main/java目录下新建application.java类,并创建好main方法。
package com.asiainfo.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer//打开服务注册功能
@EnableDiscoveryClient//打开服务发现功能
public class main {
public static void main(String[] args) {
SpringApplication.run(main.class,args);
}
}
至此,服务注册中心搭建完成。
第二部分、服务调用环境搭建,与注册中心一样需要首先建立maven工程。
首先、编辑pom文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.asininfo.springcloud</groupId>
<artifactId>data-callclient</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
<version>1.2.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
</dependencies>
</project>
由于spring-coud spring-boot包存在部分相同的jar包 为了避免jar包冲突这里统一使用spring-boot下的最新jar包。
第二步、进入/resource目录并在目录下新建bootstrap.yml、application.yml文件。
编辑模式打开bootstrap.yml写入如下内容:
spring:
application:
name: call
sleuth:
sampler:
percentage: 1 #日志采集 1代表100%
zipkin:
base-url: http://localhost:8084 #日志采集服务地址
enabled: true #打开日志采集服务
cloud:
config:
uri: ${CONFIG_SERVER_URL:http://localhost:8080}
编辑模式打开application.yml写入如下内容:
# Discovery Server Access
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #服务注册中心地址
# HTTP Server
server:
port: 8082 # HTTP (Tomcat) port #服务端口
第三步、main/java目录下新建application.java类,并创建好main方法。
package com.asiainfo.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
/**
* <p>title:main</p>
*
* <p>Description://TODO </p>
*
* <p>Copyright: Copyright (c) 2018</p>
*
* <p>Company: www.aisiainfo.com</p>
*
* @author liudp
* @version 1.0
* @date 2018/5/23 10:07
*/
@SpringBootApplication //spring-boot注解
@EnableAutoConfiguration
@EnableEurekaClient //打开服务注册
@EnableFeignClients//开启服务内部调用
public class main {
public static void main(String[] args) {
SpringApplication.run(main.class,args);
}
}
第四步、新建Controller类,代码如下:
package com.asiainfo.client.com.asiainfo.controller.com.asiainfo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/test/")
public class TestController {
@Autowired
private TestService testService;
@RequestMapping("/data1/{data}")
public Object getData(@PathVariable("data") String data) {
System.out.println(data);
Map<String, Object> obj = new HashMap<String, Object>(1);
for (int i = 0; i < 10; i++) {
obj.put("j" + i, i);
}
testService.getData("1111");
return obj;
}
}
第五步、新建接口类,原因为FeignClient调用是通过接口方式进行。代码如下:
package com.asiainfo.client.com.asiainfo.controller.com.asiainfo.service;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(value = "recive") //指定落地方应用名称
@Service
public interface TestService {
@RequestMapping("/test/data1/{data}")//落地方地址
public Object getData(@PathVariable("data")String data);
}
第三部分、落地方工程搭建,具体参照第二部分调用侧工程环境搭建。需要注意的事项为:
1.端口不能与调用侧端口一样。
2.应用名称不能一样。
3.配置FeignClient接口类时,此时填写的应该是被调用侧的应用名称。
第四部分、日志服务搭建
首先搭建maven工程,编辑pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.asiainfo.springcloud</groupId>
<artifactId>log-server</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>1.4.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>[spring-boot-*,)</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.4.7</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>[spring-boot-*,)</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.4.7</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>[spring-boot-*,)</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
第二步,创建bootstrap.yml 、application.yml文件,由于配置和上面差不多,这里就不在浪费口水了。
编辑模式打开bootstrap.yml并填入一下内容:
spring:
application:
name: log-server
编辑模式打开
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: log-server
# HTTP Server
server:
port: 8084 # HTTP (Tomcat) port
第三步 新建含main方法的类,并写入如下内容:
package com.asiainfo.log.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import zipkin.server.EnableZipkinServer;
@EnableDiscoveryClient
@EnableZipkinServer
@SpringBootApplication
public class main {
public static void main(String[] args) {
SpringApplication.run(main.class,args);
}
}
至此,整个工作搭建完成。依次启动Eureka-server、call、recive、log-server四个工程。待服务注册成功后,浏览器输入:
http://127.0.0.1:8082/test/data1/123
返回结果如下:
浏览器输入:
http://127.0.0.1:8084/zipkin/#
界面如下:
选择服务名称:
点击任意链接,进入详细日志界面。