1.springcloud项目搭建笔记1(搭建eureka_server、 product-service、order-service服务)

一、搭建eureka_server服务

1.  新建项目,依赖添加Cloud Discovery-->Eureka Server

2. 更换阿里云镜像

	<repositories>
	        <repository>
	            <id>central</id>
	            <name>aliyun maven</name>
	            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	            <layout>default</layout>
	            <!-- 是否开启发布版构件下载 -->
	            <releases>
	                <enabled>true</enabled>
	            </releases>
	            <!-- 是否开启快照版构件下载 -->
	            <snapshots>
	                <enabled>false</enabled>
	            </snapshots>
	        </repository>
    </repositories>

3. 启动类增加@EnableEurekaServer注解

4. 增加配置:

erver:
	port: 8761
	
	eureka:
	  instance:
	    hostname: localhost
	  client:
	    #指示此实例是否应将其信息注册到eureka服务器以供其他服务发现,默认为false
	    register-with-eureka: false
	    #客户端是否获取eureka服务器注册表上的注册信息,默认为true
	    fetch-registry: false
	    service-url:
	      defaulrZone: http://${eureka.instance.hostname}:${server.port}/eureka/

5. 访问:http://localhost:8761/

二、搭建商品服务

1. 新疆项目,项目依赖web-->spring web,spring cloud discovery-->eureka discovery client

2. 增加配置

	server:
	  port: 8771
	
	eureka:
	  client:
	    service-url:
	      defaulrZone: http://localhost:8761/eureka/
	
	spring:
	  application:
    name: product-service

3. 增加ccontroller,写一个可响应数据的方法

4. 访问:http://127.0.0.1:8771/api/v1/product/list

三、搭建订单服务

1. 新建项目,项目依赖web-->spring web,spring cloud Routing-->Ribbon(一个发请求 的客户端),spring cloud discovery-->eureka discovery client

2. 服务配置:

	server:
	  port: 8781
	
	eureka:
	  client:
	    service-url:
	      defaulrZone: http://localhost:8761/eureka/
	
	spring:
	  application:
	    name: order-service

3. 使用Ribbon做负载均衡,由订单服务向商品服务发起请求:

    a. 启动类注入RestTemplate的Bean

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
	return new RestTemplate();
}

     b. 在实现类中实现一个服务对另一个服务的调用:

Object forObject = restTemplate.getForObject("http://product-service/api/v1/product/find?id=" + productId, Object.class);

4. 另外一种Ribbon使用方式

  a. 直接在实现类中引入LoadBalancerClient

@Autowired
private LoadBalancerClient loadBalancerClient;

  b. 通过这个client调用

ServiceInstance choose = loadBalancerClient.choose("product-service");
String url = String.format("http://%s:%s/api/v1/product/find?id=" + productId, choose.getHost(), choose.getPort());
RestTemplate restTemplate = new RestTemplate();
Map object = restTemplate.getForObject(url, Map.class);

5. 自定义负载均衡策略

需要在调用方服务中配置

product-service:
    ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

6. 使用Feign做负载均衡(本质还是http调用)

    a. 添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

  b. 启动类新加注解:@EnableFeignClients

  c. 新建一个接口

@FeignClient(name = "product-service")
public interface ProductClient {
    @GetMapping("/api/v1/product/find")
    String findById(@RequestParam(value = "id") int id);
}

  如果原服务请求参数注解是@RequestBody,则这个接口请求注解如是,上方的注解也应该改成@PostMapping

  d. 在实现类调用,拿到的是Json字符串,可以转成对象

  7. Feign调用修改超时时间

feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 2000

  默认readTimeout是60s,但是由于hystrix默认是1s超时

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章