一、ribbon简介

Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using @FeignClient then this section also applies.

-----摘自官网

需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六

ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。

ribbon 已经默认实现了这些配置bean:

IClientConfig ribbonClientConfig: DefaultClientConfigImpl

IRule ribbonRule: ZoneAvoidanceRule

IPing ribbonPing: NoOpPing

ServerList ribbonServerList: ConfigurationBasedServerList

ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter

ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

二、建一个服务消费者

重新新建一个spring-boot工程,取名为:service-ribbon;

在它的pom.xml文件分别引入起步依赖spring-cloud-starter-eureka、spring-cloud-starter-ribbon、spring-boot-starter-web,代码如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.forezp</groupId><artifactId>service-ribbon</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>service-ribbon</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></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>Dalston.RC1</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><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>复制代码

在工程的配置文件指定服务的注册中心地址为http://localhost:8761/eureka/,程序名称为 service-ribbon,程序端口为8764。配置文件application.yml如下:

eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
server:port: 8764
spring:application:name: service-ribbon复制代码

在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceRibbonApplication {public static void main(String[] args) {SpringApplication.run(ServiceRibbonApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}}复制代码

写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:

@Service
public class HelloService {@AutowiredRestTemplate restTemplate;public String hiService(String name) {return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);}}复制代码

写一个controller,在controller中用调用HelloService 的方法,代码如下:


/*** Created by fangzhipeng on 2017/4/6.*/
@RestController
public class HelloControler {@AutowiredHelloService helloService;@RequestMapping(value = "/hi")public String hi(@RequestParam String name){return helloService.hiService(name);}}复制代码

在浏览器上多次访问http://localhost:8764/hi?name=forezp,浏览器交替显示:

hi forezp,i am from port:8762

hi forezp,i am from port:8763

这说明当我们通过调用restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

JAVA 多用户商城系统b2b2c

转载于:https://juejin.im/post/5ca46daa6fb9a05e122c8069

JAVA 多用户商城系统b2b2c- 服务消费者(rest+ribbon)相关推荐

  1. JAVA 多用户商城系统b2b2c-Spring Cloud常见问题与总结(一)

    在使用Spring Cloud的过程中,难免会遇到一些问题.所以对Spring Cloud的常用问题做一些总结.需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台 ...

  2. JAVA 多用户商城系统b2b2c-服务容错保护(Hystrix依赖隔离)

    依赖隔离 "舱壁模式"对于熟悉Docker的读者一定不陌生,Docker通过"舱壁模式"实现进程的隔离,使得容器与容器之间不会互相影响.而Hystrix则使用该 ...

  3. java多用户商城系统架构之第一篇——总的介绍

    系列文章主要是针对Java商城相关架构演化的介绍,不讲解具体业务.技术等. 最近公司要搞商城,让我多方咨询,最后看了很多,要不就是代码.表字段注释不全,要不就是bug多,要么就是文档缺少,最后决定自己 ...

  4. JAVA 多用户商城系统b2b2c-kafka处理超大消息

    Kafka设计的初衷是迅速处理短小的消息,一般10K大小的消息吞吐性能最好.但有时候,我们需要处理更大的消息,比如XML文档或JSON内容,一个消息差不多有10-100M,这种情况下,Kakfa应该如 ...

  5. JAVA 多用户商城系统b2b2c-Spring Cloud Stream 介绍

    介绍Spring Cloud Stream 电子商务平台源码请加企鹅求求:一零三八七七四六二六. Spring Cloud Stream是构建消息驱动的微服务应用程序的框架.Spring Cloud ...

  6. JAVA 多用户商城系统b2b2c---配置中心和消息总线

    Spring Cloud Bus 电子商务平台源码请加企鹅求求:一零三八七七四六二六. Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其 ...

  7. 分享大型Java多用户商城系统开发历程

    最近公司要搞商城,让我多方咨询,最后看了很多,要不就是代码.表字段注释不全,要不就是bug多,要么就是文档缺少,最后决定自己开发一套商城. 下面是开发的一些心得体会,权且记录下来,给自己做个记录把. ...

  8. 搭搭云-超级应用平台 与JNPF Java多用户商城系统源码

    搭搭云 搭搭云是非常灵活的一站式企业管理超级平台,企业在一个云端账户中即可使用包含CRM.OA.进销存.HR.财务.项目管理.ERP在内的全系列SaaS软件:应用软件开发者可以基于搭搭云低代码PaaS ...

  9. 搭搭云-超级应用平台 与JNPF Java多用户商城系统源码 最新版3.4.7源码折扣

    搭搭云 搭搭云是非常灵活的一站式企业管理超级平台,企业在一个云端账户中即可使用包含CRM.OA.进销存.HR.财务.项目管理.ERP在内的全系列SaaS软件:应用软件开发者可以基于搭搭云低代码PaaS ...

  10. JAVA 版多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C 产品概述

    随着京东天猫的上市和不断增长,网上购物商城的运营模式仍然非常火爆.如果你想发展企业,有必要立足电子商务背景,传统企业或企业家希望借助多用户商城系统 B2B2C 建立类似京东和天猫的电子商务平台. 看似 ...

最新文章

  1. J2EE分布式框架之开发环境部署(上)
  2. php中判断常量,变量,函数是否存在的方法示例
  3. 闹乌龙!京东云辟谣:停止云服务?根本没那回事儿
  4. 真不知写什么了,也就是很久没有做什么了
  5. html下拉菜单的子目录,html - 带有下拉菜单的子菜单的垂直下拉菜单 - 堆栈内存溢出...
  6. android theme继承原理,android – 使用Holo父主题从Theme.Light继承editText
  7. 测视力距离5米还是3米_7岁男孩近视猛涨300度!眼科专家提醒:保护孩子视力这一点很关键...
  8. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(四)example代码解析...
  9. [BZOJ4817]树点涂色
  10. 最详细,快速入门Web前端开发的正确姿势
  11. Android页面传值b,android数据传递(一)之activityA传递到activityB
  12. 帆软复选框选中并打印(按某种格式打印)数据分析、报填可用
  13. fastboot模式下无法找到设备,不能使用fastboot命令,需要安装驱动
  14. linux读取U盘操作
  15. qttabbar文件浏览器突然坏掉了!
  16. Java学习-Java系统介绍
  17. css 设置背景色渐变、字体颜色渐变
  18. vc c语言标准库头文件,VC++ 6.0中添加库文件和头文件
  19. Nano板使用USB与PX4通信
  20. C++中的FILL和MEMSET(zzl) 的区分

热门文章

  1. 数据结构与算法之美-字符串匹配(上)
  2. tcp/ip网络协议学习
  3. [整理]苹果审核被拒后,返回崩溃日志应该怎么分析处理
  4. 关于css布局的定位问题
  5. Project: Individual Project - Word frequency program
  6. 10115 - Automatic Editing
  7. 1.枚举类型、声明指针、常量、存储类型、运算符优先级记忆
  8. 复习HTTP 14.2 HTTP Header - Accept-Charset (RFC 2616)
  9. Parallels Desktop如何检查Windows系统是否具有EFI/UEFI或 Legacy BIOS固件接口
  10. Notion for Mac(多功能办公笔记软件)V2.0.10官方版