springboot版本:1.5.12
idea创建项目已经没有这个版本可以选择了,所以需要创建完了之后再pom文件中手动更换springboot的版本,并且以这个例子为例的话需要对springclou的一些模块的版本也进行更改
贴上完整的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.hw</groupId>
<artifactId>provider-ticket</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider-ticket</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
下面是个deomo:
首先需要创建一个springcloud的服务,也就是用来装配模块与模块之间的关系,需要选中下面的模块
然后 在服务方的启动类上加上注解@EnableEurekaServer,贴上服务模块的application.yml:
server:
port: 8761 #端口 服务端的端口号
eureka:
instance:
hostname: eureka-server #eureka实例的主机名
client:
register-with-eureka: false #不把自己本身注册到eureka中,高可用的情况可以注册
fetch-registry: false #不从eureka上来获取服务的注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
接下来贴上被调用方的模块代码:
创建的之后选中下图的模块
贴上 application.yml的配置文件
server:
port: 8002 #端口
spring:
application:
name: provider-ticket #提供者的名字
eureka:
instance:
prefer-ip-address: true #注册服务的时候使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
然后在这个被调用方写好service层,用来被 别的模块调用
最后是调用方的模块,创建方式和被调用方的创建方式一样,需要勾选那个模块,贴上application.yml配置文件:
spring:
application:
name: consumer-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true #注册服务的时候使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
由于这是调用方,需要调用别的模块的内容,所以需要在启动类上加上@EnableDiscoveryClient
用来开启发现服务功能,并且在启动类下加入以下代码用于调用其他模块方法
@LoadBalanced //使用负载均衡机制
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
调用方的controller层代码,用于调用其他模块
@RestController
public class Usercontroller {
@Autowired
RestTemplate restTemplate;
@GetMapping("/buy")
public String BuyTicket(String name){
String forObject = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class); //这个参数那些大写字母就是被调用方模块的名字,
//ticket为被调用方的一个controller层中的链接
return name+"购买了"+forObject;
}
}
然后这个demo就算基本完成了.
完整代码:https://download.csdn.net/download/qq_41594146/10926661
demo示例:
管理界面
接下来是示例调用过程,以及负载均衡的认证
第一次调用:
第二次调用:
可以见得已经是实现负载均衡的功能