Spring_cloud服务提供者
在父类导入pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
依赖
<dependencies>0
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--springCloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
包结构
IDoSomeService 接口
public interface IDoSomeService {
public String doSome();
}
IDoSomeServiceimpl 实现类
@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
@RestController
public class IDoSomeServiceimpl implements IDoSomeService {
@RequestMapping("/doSome")
@Override
public String doSome() {
System.out.println("服务提供者");
return "服务提供者eureka";
}
}
App启动类
@SpringBootApplication
@EnableEurekaServer
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
}
application.yml
##应用名称
spring:
application:
#可以自定义
name: eureka_server
##声明当前eurekaserver的端口号
server:
port: 8888
##配置eureka
eureka:
client:
##代表是否将自己注册到注册中心去
register-with-eureka: false
##表明自己是注册中心
fetch-registry: false
##配置地址
service-url:
defaultZone: http://localhost:8888/eureka
启动类启动后,可以输入配置地址的的路径http://localhost:8888
spring_cloud_provider生产者
包结构
application.yml
##应用名称
spring:
application:
name: eureka-provider
##声明当前eurekaserver的端口号
server:
port: 8890
##配置eureka
eureka:
client:
##配置地址
service-url:
defaultZone: http://localhost:8888/eureka
ConsumerController
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class ConsumerController {
//Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法
@Resource
private RestTemplate restTemplate;
@RequestMapping("/doSome")
public String doSome(){
System.out.println("ConsumerController");
return restTemplate.getForObject("http://localhost:8889/doSome",String.class);
}
}
App 启动类
@EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;
@SpringBootApplication
@EnableEurekaClient
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
}
spring_ cloud_ consumer消费者
application.yml
##应用名称
spring:
application:
name: eureka-consumer
##声明当前eurekaserver的端口号
server:
port: 8891
##配置eureka
eureka:
client:
##配置地址
service-url:
defaultZone: http://localhost:8888/eureka
ConsumerController
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RequestMapping
public class ConsumerController {
@Resource
private RestTemplate restTemplate;
@RequestMapping("/doSome")
public String doSome(){
System.out.println("ConsumerController");
return restTemplate.getForObject("http://eureka-provider/doSome",String.class);
}
}
写生产者的name,如果只要单个可以写localhost…8080这样子
App 启动类
@SpringBootApplication
@EnableEurekaClient
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}
springcloud_zuul包结构
依赖
<--修改parent节点-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--eureka依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-zuul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.7.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
MyZuulFilter 类
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@Component
public class MyZuulFilter extends ZuulFilter {
/**
* 过滤类型
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
* 请求过滤顺序
* @return
*/
@Override
public int filterOrder() {
return 0;
}
/**
*
* @return
*/
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
//获取token参数
RequestContext rc = RequestContext.getCurrentContext();
HttpServletRequest request = rc.getRequest();
String token = request.getParameter("token");
if(token!=null){
return null;
}
//表示不进行路由
rc.setSendZuulResponse(false);
rc.setResponseStatusCode(401);
try {
rc.getResponse().setContentType("text/html;charset=utf-8");
rc.getResponse().getWriter().write("没有传递正确参数,请校验后重试~");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
application.yml
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka
#fetch-registry: false
#register-with-eureka: false
server:
port: 10002
spring:
application:
name: zuul
##配置zuul网关
zuul:
routes:
api-a:
path: /consumer-zuul/**
service-id: eureka01
defaultZone端口号要和cloud中application.xml的port端口一样
IDoSomeService
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
//生产者应用名
@FeignClient("eureka-provider")
public interface IDoSomeService {
//生产者接口暴露地址
@RequestMapping("/doSome")
public String doSome();
}
springcloud01包结构
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
DoSomeService
public interface DoSomeService {
public String doSome();
}
DoSomeServiceImpl 实现类
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DoSomeServiceImpl implements DoSomeService {
@RequestMapping("/doSome")
@Override
public String doSome() {
return "呵呵1111111";
}
}
application.yml
##应用名称
spring:
application:
name: eureka01
##声明当前eurekaserver的端口号
server:
port: 8892
##配置eureka
eureka:
client:
##配置地址
service-url:
defaultZone: http://localhost:8888/eureka
ConsumerApp 启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApp {
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class, args);
}
}
结果