spring cloud学习
来源:互联网 发布:mac图片如何新建文件夹 编辑:程序博客网 时间:2024/06/16 14:11
1.服务的注册与发现
@EnableEurekaServer@SpringBootApplicationpublic class EurekaserverApplication { public static void main(String[] args) { SpringApplication.run(EurekaserverApplication.class, args); }}
@EnableEurekaServer这个注解表示了它是一个服务注册中心。
@EnableEurekaClient 这个注解表示它是一个客户端。
当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。
如果心跳超时,则通常将该实例从注册server中删除。如果是本地,可以在http://localhost:8761 看到服务已经注册上了。
代码示例:
服务端:https://github.com/1789304191/eureka/tree/master/eureka-server
客户端:https://github.com/1789304191/eureka/tree/master/eureka-client1
https://github.com/1789304191/eureka/tree/master/eureka-client2
2.服务消费者(rest+ribbon)
@SpringBootApplication@EnableDiscoveryClientpublic class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); }}
在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;
并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
下面写一个service调用客户端接口。
@Servicepublic class HelloService { @Autowired RestTemplate restTemplate; public String hiService(String name) { return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); }}
在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名。
这时就会轮询调用client1和client2的hi接口。
代码示例:https://github.com/1789304191/eureka/tree/master/service-ribbon
3.服务消费者(Feign)
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); }}
在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能。
定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下。
@FeignClient(value = "service-hi")public interface SchedualServiceHi { @RequestMapping(value = "/hi",method = RequestMethod.GET) String sayHiFromClientOne(@RequestParam(value = "name") String name);}启动两个客户端。通过controller调用SchedualServiceHi接口就会轮询调用两个客户端。
代码示例:https://github.com/1789304191/eureka/tree/master/service-feign
4.路由网关(zuul)
@EnableZuulProxy@EnableEurekaClient@SpringBootApplicationpublic class ServiceZuulApplication { public static void main(String[] args) { SpringApplication.run(ServiceZuulApplication.class, args); }}在其入口applicaton类加上注解@EnableZuulProxy,开启zuul的功能。
加上配置文件application.yml加上以下的配置代码。
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/server: port: 8769spring: application: name: service-zuulzuul: routes: api-a: path: /api-a/** serviceId: service-ribbon api-b: path: /api-b/** serviceId: service-feign
首先指定服务注册中心的地址为http://localhost:8761/eureka/,服务的端口为8769,服务名为service-zuul;以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务。zuul不仅只是路由,并且还能过滤,做一些安全验证。
@Componentpublic class MyFilter extends ZuulFilter{ private static Logger log = LoggerFactory.getLogger(MyFilter.class); @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString())); Object accessToken = request.getParameter("token"); if(accessToken == null) { log.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); }catch (Exception e){} return null; } log.info("ok"); return null; }}
filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
- pre:路由之前
- routing:路由之时
- post: 路由之后
- error:发送错误调用
- filterOrder:过滤的顺序
- shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。
- run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。
参考:http://blog.csdn.net/forezp/article/details/70148833
阅读全文
0 1
- spring cloud学习-什么是Spring Cloud Eureka?
- spring cloud 学习地址
- spring cloud 学习网站
- spring cloud学习笔记
- spring cloud 学习 链接
- Spring Cloud学习
- spring cloud学习一
- spring boot&&cloud学习
- Spring Cloud学习笔记
- Spring Cloud 学习,整理
- spring cloud 学习网站
- Spring Cloud学习 -- 配置管理
- Spring Cloud 学习笔记
- spring cloud 学习笔记
- spring-cloud学习BUG
- spring-cloud学习
- spring cloud学习
- Spring Cloud学习笔记
- Framework学习(八)Service的启动/绑定过程
- session.invalidate()
- 实例方法
- 复习python 基础
- Just another Robbery LightOJ
- spring cloud学习
- 两端对齐文本效果
- 最常见的20个jQuery面试问题及答案
- openWRT设置中文admin后台及配置SSH登录
- postgresql 修改字段长度
- Android 面试之笔试题
- C、C++内存对齐
- 构造方法引用
- springmvc 用拦截器+token防止重复提交