1.创建项目
<?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 https://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>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sxt</groupId>
<artifactId>11-eureka-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>11-eureka-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
</project>
2.修改全局配置文件
1.添加需要注册到的那个的Eureka注册中心的IP地址
注意高版本的使用的属性是availability-zones属性
spring:
application:
name: eureka-provider
eureka:
client:
availability-zones:
defaultZone: http://localhost:8761/
3.修改启动器添加客户端注解
package com.sxt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient //表示当前为客户端
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
4.启动观察查看管理界面的内的内容如果出现这个的就是注册成功
5.构件provider供应者
供消费者的消费
/**
* @project_name:springcloud
* @date:2019/8/30:15:01
* @author:shinelon
* @Describe:创建provider
*/
@RestController
public class UserController
{
@GetMapping(value = "/user")
public Users userController(){
return new Users("username","password");
}
}
6.创建消费者项目
注意:customer和provider属于平级都是Eureka注册中心的客户端,都需要在Eureka注册中心内注册
全局配置文件
同样需要注册到注册中心中
spring:
application:
name: eureka-provider
eureka:
client:
availability-zones:
defaultZone: http://localhost:8761/
server:
port: 8081
7:
查看管理界面消费者也注入进来了
8.进行远程的访问
注意调用远程访问的时候远程服务返回的数据必须是JSON格式的数据不然出现的不能转换对象的异常
package com.sxt.controller;
import com.sxt.pojo.Users;
import com.sxt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @project_name:springcloud
* @date:2019/8/30:15:33
* @author:shinelon
* @Describe:
*/
@Controller
public class CustomerController
{
@Autowired
private UserService userService;
@GetMapping(value = "/customer")
@ResponseBody
public Users customerController(){
return this.userService.getUsers();
}
}
通常业务层进行远程方法的调用
package com.sxt.service;
import com.sxt.pojo.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* @project_name:springcloud
* @date:2019/8/30:15:15
* @author:shinelon
* @Describe:
*/
@Service
public class UserService
{
/**
* 远程调用服务的代码的编写
* @return
*/
/**
* LoadBalancerClient:此对象相当于负载均衡器ribbon 负
* 载均衡器 ,通过此对象获取远程服务
*/
@Autowired
private LoadBalancerClient loadBalancerClient;
public Users getUsers()
{
//在微服务中使用的使用应用的名称获取服务的所以这里要给远程服务的应用名称
//ServiceInstance对象封装了远程服务的地址和端口等信息
ServiceInstance choose = this.loadBalancerClient.choose("eureka-provider");
//拼接URL
StringBuffer buffer = new StringBuffer();
buffer.append("http://").append(choose.getHost()).append(":").append(choose.getPort()).append("/user");
//使用MVC模板进行远程访问
RestTemplate restTemplate = new RestTemplate();
//ParameterizedTypeReference用于接收远程返回的对象
ParameterizedTypeReference<Users> type = new ParameterizedTypeReference<Users>()
{
};
//接收返回的对象
ResponseEntity<Users> responseEntity =restTemplate.exchange(buffer.toString(),HttpMethod.GET, null, type);
return responseEntity.getBody();
}
}
结果展示