个人博客网:www.lfuping.cn (你想要这里多有)
1. Ribbon是客户端负载均衡,所以肯定集成再消费端,也就是consumer端
修改springCloud-consumer-1工程
引入依赖,pom.xml 加入 ribbon相关依赖
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.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
application.yml加
因为我电脑配置有限,就没用eureka集群做测试了,只用了eureka单机配置
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://localhost:7001/eureka/
ribbon结合eureka来调用服务提供者;
SpringCloudConfig也改成 要加个负载均衡配置 @LoadBalanced
package com.li.spingcloud.consumer.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* SpringCloud相关配置
*
* @author Administrator
*
*/
@Configuration
public class SpringCloudConfig {
/**
* 调用服务模版对象
*
* @return
*/
@Bean
@LoadBalanced // 引入ribbon负载均衡
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
因为和eureka整合,所以启动类ConsumerApplication 加个注解 @EnableEurekaClient
修改ConsumerController层,
package com.li.spingcloud.consumer.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.li.springcloud.common.model.Student;
/**
* 服务消费者-控制器
*
* @author Administrator
*
*/
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
/**
* 查询信息
*
* @return
*/
@RequestMapping(value = "/consumer/list", produces = "application/json; charset=utf-8", method = {
RequestMethod.POST, RequestMethod.GET })
public List<Student> list() {
//改成指定的微服务应用名称 PROVIDER
List<Student> result = restTemplate.getForObject(
"http://PROVIDER/provider/list", List.class);
// 通过注册中心调用消费者提供的服务
return result;
}
}
2.修改SpringClodu-provider-1服务生产者application.yml配置
主要是加配置,指定下应用名称:
application:
name: provider
server:
port: 1001
context-path: /
# 数据源配置
spring:
application:
name: provider
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springcloudDB
username: root
password: lifuping0.
jpa:
hibernate:
ddl-auto: update
show-sql: true
eureka:
instance:
hostname: eureka1 #eureka客户端主机实例名称
appname: provider #客户端服务名
instance-id: springcloud-provider:1001 #客户端实例名称
prefer-ip-address: true #显示IP
client:
service-url:
defaultZone: http://localhost:7001/eureka/
#集群模式defaultZone: http://lifuping.eureka3.com:6001/eureka/,http://lifuping.eureka2.com:5001/eureka/,http://lifuping.eureka1.com:7001/eureka/ # 集群
#单机defaultZone: http://localhost:7001/eureka
#把服务注册到eureka注册中心
微服务应用名称是 provider
所以服务调用者这边的控制器里PRE_HOST改成 http://PROVIDER/provider/list 即可;
先启动eureka单机,然后再启动服务提供者,再启动服务消费者;
访问消费者接口: http://localhost:8080/consumer/list
正常没问题浏览器返回:
如果出现如下错误:
刷新浏览器页面可能是延迟,如果不行那可能是你配置写错了,仔细检查一下确认真的没有问题,也有可能是电脑环境的问题,重启电脑在重试几次
源码下载链接: https://pan.baidu.com/s/11usvmZUS0ZGDyhp5FxQl8A
提取码: bhbx
欢迎关注我的微信公众号:平川大叔