第一个SpringCloud项目,记录一下。
场景:一个人向114电话平台,查询警察局的电话,然后拨打警察局的电话报警。
一、具体代码如下:
1、建立114服务项目 项目名称 first-server-114
1)、pom.xml
<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.cjl.springCloud</groupId>
<artifactId>first-server-114</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
2)、application.yml
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
3)、启动类
@SpringBootApplication
@EnableEurekaServer
public class ServerApp {
public static void main(String[] args) {
new SpringApplicationBuilder(ServerApp.class).web(true).run(args);
}
}
2、建立警察局服务发布者项目 项目名称 first-serverPublisher-police
1)、pom.xml
<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.cjl.springCloud</groupId>
<artifactId>first-serverPublisher-police</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
</project>
2)、application.yml
spring:
application:
name: first-serverPublisher-police
eureka:
client:
serviceUrl:
dafaultZone: http://localhost:8761/eureka/
3)、启动类
@SpringBootApplication
@EnableEurekaClient
public class PublisherApp {
public static void main(String[] args) {
new SpringApplicationBuilder(PublisherApp.class).web(true).run(args);
}
}
4)、centroller
@RestController
public class PoliceContorller {
@RequestMapping("/call")
public String call(){
return "call a police";
}
}
3、建立个人项目 项目名称first-serviceCaller-person
1)、pom.xml
<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.cjl.springCloud</groupId>
<artifactId>first-serviceCaller-person</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 负载均衡框架 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
</project>
2)、application.yml
server:
port: 8081
spring:
application:
name: first-serviceCaller-person
eureka:
client:
serviceUrl:
dafaultZone: http://localhost:8761/eureka/
3)、启动类
@SpringBootApplication
@EnableEurekaClient
public class PersonApp {
public static void main(String[] args) {
new SpringApplicationBuilder(PersonApp.class).web(true).run(args);
}
}
4)、centroller
@RestController
@Configuration
public class TestContoller {
/**
* 具有调用负载均衡的功能
* @return
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
@RequestMapping("/test")
public String test()
{
RestTemplate tpl = getRestTemplate();
String str = tpl.getForObject("http://first-serverPublisher-police/call", String.class);
return str;
}
}
然后分别启动三个项目
登录:http://localhost:8761/ 会看到在Erueka上注册有两个服务
然后输入 http://localhost:8081/test/ 结果如下:
二、项目中报错
1、 first-server-114,启动报错:Cannot execute request on any knownserver、 Connection refused: connect
原因:eureka服务器把自己当做一个客户端注册到一个服务器上
解决办法:在application.yml中配置一下,禁用这个注册
server:
port: 8761
eureka:
client:
register-with-eureka:false
fetch-registry: false
切记:false 前的空格,必须有
2、java.net.UnknownHostException: first-serverPublisher-police
报错原因:没有配置@Configuration 注解,所以spring就没法把@bean修改的getRestTemplate()方法加入spring容器
解决办法:在TestContoller类加上该 @Configuration 注解