学习Spring-Cloud –编写微服务

继续我的Spring-Cloud学习历程, 之前我已经介绍了如何编写典型的基于Spring-Cloud和Netflix OSS的微服务环境的基础架构组件–在此特定实例中,有两个关键组件,用于注册和发现服务的Eureka和Spring Cloud用于维护服务配置集中式配置库的配置。 在这里,我将展示如何开发两个虚拟微服务,一个是简单的“ pong”服务,另一个是使用“ pong”服务的“ ping”服务。

乒乓球

Sample-Pong微服务

处理“ ping”请求的端点是典型的基于Spring MVC的端点:

@RestController
public class PongController {@Value("${reply.message}")private String message;@RequestMapping(value = "/message", method = RequestMethod.POST)public Resource<MessageAcknowledgement> pongMessage(@RequestBody Message input) {return new Resource<>(new MessageAcknowledgement(input.getId(), input.getPayload(), message));}}

它收到一条消息并以确认响应。 在这里,该服务利用配置服务器来获取“ reply.message”属性。 因此,“ pong”服务如何找到配置服务器,可能有两种方式-直接通过指定配置服务器的位置,或通过Eureka查找配置服务器。 我习惯了将Eureka视为事实来源的方法,因此本着这种精神,我正在使用Eureka查找配置服务器。 Spring Cloud使整个流程变得非常简单,它所需要的只是一个“ bootstrap.yml”属性文件,其内容如下:

---
spring:application:name: sample-pongcloud:config:discovery:enabled: trueserviceId: SAMPLE-CONFIGeureka:instance:nonSecurePort: ${server.port:8082}client:serviceUrl:defaultZone: http://${eureka.host:localhost}:${eureka.port:8761}/eureka/

通过“ eureka.client.serviceUrl”属性指定Eureka的位置,并将“ spring.cloud.config.discovery.enabled”设置为“ true”以指定通过指定的Eureka服务器发现配置服务器。

仅需注意 ,这意味着Eureka和Configuration Server必须先完全启动,然后才能尝试提供实际服务,这是先决条件,并且基本假设是在应用程序启动时可以使用Infrastructure组件。

配置服务器具有“ sample-pong”服务的属性,可以使用Config-servers端点进行验证-http:// localhost:8888 / sample-pong / default,8888是我为之指定的端口服务器端点,并应按照以下内容响应内容:

"name": "sample-pong","profiles": ["default"],"label": "master","propertySources": [{"name": "classpath:/config/sample-pong.yml","source": {"reply.message": "Pong"}}]
}

可以看出,该中央配置服务器的“ reply.message”属性将被pong服务用作确认消息。

现在要将此端点设置为服务,所需要做的就是沿着这些行基于Spring-boot的入口点:

@SpringBootApplication
@EnableDiscoveryClient
public class PongApplication {public static void main(String[] args) {SpringApplication.run(PongApplication.class, args);}
}

这样就完成了“ pong”服务的代码。

抽样微服务

因此,现在转到“乒乓”微服务的消费者上,该消费者非常富想象力地称为“乒乓”微服务。 Spring-Cloud和Netflix OSS提供了许多选项来调用Eureka注册服务上的端点,以总结我拥有的选项:

  1. 使用原始的Eureka DiscoveryClient查找托管服务的实例,并使用Spring的RestTemplate进行调用。
  2. 使用Ribbon客户端负载均衡解决方案,可以使用Eureka查找服务实例
  3. 使用Feign ,它提供了一种声明性的方式来调用服务调用。 内部使用功能区。

我和费恩一起去。 所需要的只是一个接口,该接口显示了调用服务的合同:

package org.bk.consumer.feign;import org.bk.consumer.domain.Message;
import org.bk.consumer.domain.MessageAcknowledgement;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;@FeignClient("samplepong")
public interface PongClient {@RequestMapping(method = RequestMethod.POST, value = "/message",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodyMessageAcknowledgement sendMessage(@RequestBody Message message);
}

注释@FeignClient(“ samplepong”)内部指向功能区“命名”客户端,称为“ samplepong”。 这意味着该命名客户端的属性文件中必须有一个条目,就我而言,我的application.yml文件中包含以下条目:

samplepong:ribbon:DeploymentContextBasedVipAddresses: sample-pongNIWSServerListClassName: com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerListReadTimeout: 5000MaxAutoRetries: 2

这里最重要的条目是“ samplepong.ribbon.DeploymentContextBasedVipAddresses”,它指向“ pong”服务Eureka注册地址,Ribbon将使用该地址注册服务实例。

该应用程序的其余部分是一个常规的Spring Boot应用程序。 我已经在Hystrix后面公开了此服务调用,该服务可以防止服务调用失败,并且基本上可以包装此FeignClient:

package org.bk.consumer.service;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.bk.consumer.domain.Message;
import org.bk.consumer.domain.MessageAcknowledgement;
import org.bk.consumer.feign.PongClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;@Service("hystrixPongClient")
public class HystrixWrappedPongClient implements PongClient {@Autowired@Qualifier("pongClient")private PongClient feignPongClient;@Override@HystrixCommand(fallbackMethod = "fallBackCall")public MessageAcknowledgement sendMessage(Message message) {return this.feignPongClient.sendMessage(message);}public MessageAcknowledgement fallBackCall(Message message) {MessageAcknowledgement fallback = new MessageAcknowledgement(message.getId(), message.getPayload(), "FAILED SERVICE CALL! - FALLING BACK");return fallback;}
}

“启动”起来

我已经对整个设置进行了docker化,因此启动应用程序集的最简单方法是首先通过以下方式为所有工件构建docker映像:

mvn clean package docker:build -DskipTests

并使用以下命令将其全部调出,假设docker和docker-compose都在本地可用:

docker-compose up

假设一切正常,Eureka应该显示所有已注册的服务,网址为http:// dockerhost:8761 url –

尤里卡控制台充实

ping应用程序的用户界面应位于http:// dockerhost:8080 url –

SampleSpringCloudView

此外,Hystrix仪表板应可用于监视对此URL http:// dockerhost:8989 / hystrix / monitor?stream = http%3A%2F%2Fsampleping%3A8080%2Fhystrix.stream的“ pong”应用程序的请求:

SpringCloud-Hystrix

参考文献

  1. 该代码位于我的github位置 – https://github.com/bijukunjummen/spring-cloud-ping-pong-sample
  2. 大多数代码都是从spring-cloud-samples存储库大量借用的 – https://github.com/spring-cloud-samples

翻译自: https://www.javacodegeeks.com/2015/07/learning-spring-cloud-writing-a-microservice.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux内核配置usb虚拟串口,Linux USB虚拟串口设备

Linux内核中usb设备侧驱动程序分成3个层次&#xff1a;UDC驱动程序、Gadget API和Gadget驱动程序。UDC驱动程序(USB控制器)直接访问硬件&#xff0c;控制USB设备和主机间的底层通信&#xff0c;向上层提供与硬件相关操作的回调函数。Gadget API是UDC驱动程序回调函数的简单包装…

Chunked coding converter插件的使用方法

burp插件----Chunked coding converter url下载&#xff1a;https://github.com/zxl2605/chunked-coding-converter 安装步骤&#xff1a;BurpSuite -> Extender -> Extensions -> Add -> Extension Type: Python -> Select file: chunked-coding-converter.0.…

linux 提升cpu权限,CPUlimit有效防止Linux系统CPU过载

最近使用Nginx服务器测试 pagespeed 的加速效果时&#xff0c;发现这货会造成 CPU 占用过高&#xff0c;Nginx 经常 100%&#xff0c;尽管使用的是静态缓存&#xff0c;总是触发主机商的CPU占用上限&#xff0c;不停的被强制关机。发现 CPULimit 这款工具刚好可以解决这个问题&…

domain hunter pro插件的使用方法

bilibili教程&#xff1a;https://www.bilibili.com/video/BV1eA411P7xC/ 安装 获取软件的Jar包&#xff0c;由于该软件是基于BurpSuite的插件程序。需要与BurpSuite一起使用。 安装后的界面效果 项目管理 创建一个新的项目&#xff0c;也可以打开已有的项目文件&#xf…

CSS基本语法?

CSS 实例 CSS 规则由两个主要的部分构成&#xff1a;选择器&#xff0c;以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素。 每条声明由一个属性和一个值组成。 属性&#xff08;property&#xff09;是您希望设置的样式属性&#xff08;style attribute&#x…

BurpSuite插件 -- FastjsonScan(反序列化检测)

你可以因为现任不好二分手&#xff0c;但千万不要认为别人更好&#xff0c;永远有人更好&#xff0c;眼下便是更好。。。 ---- 网易云热评 一、插件介绍&#xff1a; 一个简单的Fastjson反序列化检测burp插件&#xff0c;我在挖洞的时候看到一些json请求总是想要检测一下有没有…

查看linux电脑总内存,如何查看Linux系统中的内存使用情况的命令呢?

有些命令可用于检查Linux系统中的内存使用情况。这是一些更好的命令。有很多工具可以查看Linux系统中的内存使用情况。一些命令被广泛使用&#xff0c;例如free和ps。其他命令允许以多种方式显示系统的性能统计信息&#xff0c;例如top。在本文中&#xff0c;我们将介绍一些命令…

【工具使用】Xray与Burp联动--流量转发插件Passive Scan Client

Burp被动扫描流量转发插件:Passive Scan Client 0x01 插件编译 插件地址&#xff1a;https://github.com/c0ny1/passive-scan-client rootkali:~# git clone https://github.com/c0ny1/passive-scan-client.git rootkali:~# cd passive-scan-client/ rootkali:~/passive-scan…

linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

(基于LINUX的操作系统实验教程)(最终版)《基于LINUX的操作系统实验教程.doc》由会员分享&#xff0c;可免费在线阅读全文&#xff0c;更多与《(基于LINUX的操作系统实验教程)(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、b&#xff1b;*Waitonthe…

服务器硬件监控转载:

转载&#xff1a;http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器&#xff0c;本来准备把针对服务器的硬件监控这一部分总结下成文&#xff0c;结果过个端午给过忘了。。。今天就又整理了下&#xff0c;在这里分享给51博友&#xff0c;也算是对自己前段工作的…

验证码识别Burp reCAPTCHA插件使用

介绍 Burp的reCAPTCHA也可用来识别验证码&#xff0c;github地址&#xff1a;https://github.com/bit4woo/reCAPTCHA&#xff0c;下载相应的jar包添加到burp中&#xff0c;位置在extender-extensions-add下&#xff0c;添加成功后burp模块栏会多出reCAPTCHA一栏&#xff0c;如下…

linux下的五种io模型,Linux下的五种IO模型

Java中提供的IO有关的API&#xff0c;在文件处理的时候&#xff0c;其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装&#xff0c;可见我的另一篇博客)开门见山&#xff0c;Linux下的如中IO模型&#xff1a;阻塞IO模型&#xff0c;非阻塞IO模型&#xff0c;IO复用模…

如何使用Eclipse调试Maven构建

当运行带有许多插件&#xff08;例如jOOQ或Flyway插件 &#xff09;的Maven构建时&#xff0c;您可能想更深入地了解这些插件或这些插件的扩展内部发生了什么。 当您从命令行运行Maven时&#xff0c;这可能并不明显&#xff0c;例如通过&#xff1a; C:\Users\jOOQ\workspace&…

PropertyGrid 控件使用方法

编写一个对象&#xff0c;后面传递给 PropertyGrid 来显示&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace WindowsForms_PropertyGrid {public class UserPropertyClass{privat…

BurpSuite插件 -- Struts2-RCE

​好遗憾&#xff0c;明明不想失去&#xff0c;却又无能为力&#xff0c;说真的&#xff0c;那种想放弃又想爱的滋味&#xff0c;真折磨人。。。。 ---- 网易云热评 一、插件介绍 一个用于检查struts2 RCE漏洞的Burp扩展器 二、下载地址&#xff08;插件作者&#xff1a;prakh…

各种服务常用端口号

常见的数据库&#xff0c;默认端口号是多少: 一、关系型数据库 1、MySql数据库 &#xff0c;默认端口是: 3306&#xff1b; 2、Oracle数据库 &#xff0c;默认端口号为&#xff1a;1521&#xff1b; 3、Sql Server数据库 &#xff0c;默认端口号为&#xff1a;1433&#xff…

Burpsuite爆破含CSRF-Token的程序

转载至https://www.se7ensec.cn/2018/10/21/Burpsuite%E7%88%86%E7%A0%B4%E5%90%ABCSRF-Token%E7%9A%84%E7%A8%8B%E5%BA%8F/ 3 年前发表 8 个月前更新 渗透测试 2 分钟读完 (大约273个字) 358次访问 Burpsuite爆破含CSRF-Token的程序 1. 抓包 0x01 开启burpsuite代理&#xff0…

正则表达式贪婪与非贪婪模式

正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式&#xff0c;今天用的时候就想不起来了&#xff0c;现在这里总结一下&#xff0c;以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配 如&#xff1a;String str"abcaxc"…

[Noip模拟赛] Power

POWER 源程序名 POWER.??? (PAS,C,CPP) 可执行文件名 POWER.EXE 输入文件名 POWER.IN 输出文件名 POWER.OUT 多瑞卡得到了一份有趣而高薪的工作。每天早晨他必须关掉他所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。 多瑞卡每晚到早晨5点钟都在晚会上&a…

linux逆向工程反汇编,Kali Linux 逆向工程工具 Jad 教程

日期&#xff1a;2017年12月21日观看&#xff1a; 1,895 C 次用法&#xff1a;jad [option(s)] jad [选项(s)] 选项&#xff1a;-a - 生成JVM指令作为注释(注释)-af - 注释时输出完全限定的名称-b - 生成冗余大括号(大括号)-clear - 清除所有的前缀&#xff0c;包括默认的前缀-…