学习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,一经查实,立即删除!

相关文章

CSS页面DEMO

层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本…

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

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

linux 内核移植和根文件系统的制作【转载】

原文地址&#xff1a;http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html1.1 Linux内核基础知识 在动手进行Linux内核移植之前&#xff0c;非常有必要对Linux内核进行一定的了解&#xff0c;下面从Linux内核的版本和分类说起。 1.1.1 Linux版本 Linux内核的版本…

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 这款工具刚好可以解决这个问题&…

什么是CSS?你真的理解?

什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中&#xff0c;是为了解决内容与表现分离的问题外部样式表可以极大提高工作效率外部样式表通常存储在 CSS 文件中多个样式定义可层叠为一个 样…

大数据公司

合肥盈云科技信息有限公司 中润普达&#xff08;集团&#xff09;公司转载于:https://www.cnblogs.com/hugh2006/p/4587232.html

domain hunter pro插件的使用方法

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

qt linux opensource ,QT opensource embedded linux 编…

建立自己的编译链文件夹 mkdir linux-mick-omap拷贝别的文件夹下&#xff0c;譬如linux-arm-g中的qmake.conf qplatformdefs.h到linux-mick-omap修改qmake.conf, 把arm-linux-gcc 和 arm-linux-g改成自己的arm-none-linux-gnueabi-gcc 和 arm-none-linux-gnueabi-g只需要修改前…

CSS基本语法?

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

java中远程连接忽略证书_忽略Java中的自签名证书

java中远程连接忽略证书我在职业生涯中遇到过几次问题&#xff0c;就是我们有时希望允许自签名证书用于开发或测试目的。 Google的快速搜索显示了多年来无数Java开发人员遇到的麻烦。 根据确切的证书问题&#xff0c;您可能会收到类似以下内容之一的错误&#xff0c;尽管我几乎…

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

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

开发人员对Spring vs JavaEE的看法

在Java社区中&#xff0c;Spring vs JavaEE是一个永无止境的争论。 在这样的辩论中&#xff0c;人们组成一个团体&#xff0c;由两个传播者&#xff0c;建筑师和一个平台的核心粉丝组成&#xff0c;并且不断进行辩论。 参与辩论的人可能是负责平台选择的架构师。 但是开发人员会…

使自定义控件居中于父容器的计算公式

frm.Top (this.panelListView.Height - frm.Height) / 2; frm.Left (this.panelListView.Width - frm.Width) / 2; 设置两个值&#xff0c;top和left&#xff0c;公式&#xff1a;用父容器的长宽减去自定义控件的长宽然后除以二。转载于:https://www.cnblogs.com/llcdbk/p/46…

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

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

如何玩转CSS的Id 和 Class选择器?

目录 id 和 class 选择器 id 选择器 class 选择器 id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置”id” 和 “class”选择器。 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属性来设置id选择器,CSS 中 id…

【工具使用】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…

怎么玩转CSS内部样式表与外部样式表?

CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档。 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet)内部样式表(Internal style sheet)内联样式(Inline style)外部样式表 当样式需要应用于很多页面时,外部样式表将是理想的选择。…

服务器硬件监控转载:

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