springcloud代码


EurekaApplication.java

/// EurekaApplication.java
@SpringBootApplication
// 标记该项目是一个Eureka Server
@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurakaApplication.class, args);
	}

}

application.yml(Eureka Server)

### application.yml
# 端口号
server:
  port: 8088
spring:
  application:
    name: eureka
# 默认情况下,Eureka server也是一个普通的微服务,所以当它还是一个注册中心的时候,他会有两层身份:1.注册中心 2:普通服务
# 即当前服务会自己把自己注册到自己上面的来
# eureka.client.register-with-eureka设置为false表示当前项目不要注册到注册中心上
eureka:
  client:
    register-with-eureka: false
# 表示是否从Eureka server上获取注册信息
    fetch-registry: false

application-a.yml(Eureka Server)

# 端口号
server:
  port: 1111
spring:
  application:
    name: eureka
# 默认情况下,Eureka server也是一个普通的微服务,所以当它还是一个注册中心的时候,他会有两层身份:1.注册中心 2:普通服务
# 即当前服务会自己把自己注册到自己上面的来
eureka:
  instance:
    hostname: eurekaA
  client:
# eureka.client.register-with-eureka设置为true表示当前项目要注册到注册中心上
    register-with-eureka: true
# 表示是否从Eureka server上获取注册信息
    fetch-registry: true
# A注册到B上去
    service-url:
      defaultZone: http://eurekaB:1112/eureka

application-b.yml(Eureka Server)

# 端口号
server:
  port: 1112
spring:
  application:
    name: eureka
# 默认情况下,Eureka server也是一个普通的微服务,所以当它还是一个注册中心的时候,他会有两层身份:1.注册中心 2:普通服务
# 即当前服务会自己把自己注册到自己上面的来
eureka:
  instance:
    hostname: eurekaB
  client:
# eureka.client.register-with-eureka设置为true表示当前项目要注册到注册中心上
    register-with-eureka: true
# 表示是否从Eureka server上获取注册信息
    fetch-registry: true
# B注册到A上去
    service-url:
      defaultZone: http://eurekaA:1111/eureka

application.yml(Eureka Client)

spring:
  application:
    name: provider
server:
  port: 1113
eureka:
  client:
    service-url:
# 8088是application.yml(Eureka Server)的端口号
      defaultZone: http://localhost:8088/eureka

HelloController.java

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello cloud";
    }
}

application.yml(Eureka Consumer)

spring:
  application:
    name: consumer
server:
  port: 1114
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8088/eureka

UseHelloController.java

package com.ll.consumer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

@RestController
public class UseHelloController {
    @GetMapping("hello1")
    public String hello1(){
        HttpURLConnection conn=null;
        URL url= null;
        try {
            url = new URL("http://localhost:1113/hello");
            conn= (HttpURLConnection) url.openConnection();
            if(conn.getResponseCode()==200){
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String s=br.readLine();
                br.close();
                return s;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }

    // 导入的是import org.springframework.cloud.client.discovery.DiscoveryClient;
    @Autowired
    DiscoveryClient discoveryClient;

    @GetMapping("hello2")
    public String hello2(){
        // serviceId是要调用的服务名称
        // 因为是集群部署的,所以是list,一个ServiceInstance是一个provider实例
        List<ServiceInstance> list = discoveryClient.getInstances("provider");
        ServiceInstance instance = list.get(0);
        String host = instance.getHost();
        int port = instance.getPort();
        HttpURLConnection conn=null;
        StringBuffer buffer = new StringBuffer();
        buffer.append("http://")
                .append(host)
                .append(":")
                .append(port)
                .append("/hello");
        URL url= null;
        try {
            url = new URL(buffer.toString());
            conn= (HttpURLConnection) url.openConnection();
            if(conn.getResponseCode()==200){
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String s=br.readLine();
                br.close();
                return s;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }

    int count=0;

    @GetMapping("hello3")
    public String hello3(){
        // serviceId是要调用的服务名称
        // 因为是集群部署的,所以是list,一个ServiceInstance是一个provider实例
        List<ServiceInstance> list = discoveryClient.getInstances("provider");
        // 在从集合中,获取数据时,通过count++取余数组长度,就可以实现线性负载均衡。
        ServiceInstance instance = list.get((count++)% list.size());
        String host = instance.getHost();
        int port = instance.getPort();
        HttpURLConnection conn=null;
        StringBuffer buffer = new StringBuffer();
        buffer.append("http://")
                .append(host)
                .append(":")
                .append(port)
                .append("/hello");
        URL url= null;
        try {
            url = new URL(buffer.toString());
            conn= (HttpURLConnection) url.openConnection();
            if(conn.getResponseCode()==200){
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String s=br.readLine();
                br.close();
                return s;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }
}


HelloController.java(集群化部署)

package com.ll.provider;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    // 启动多个provider实例,多个provider实例的端口不同
    // 为了区分调用时到底是哪一个provider提供的服务,这里在接口返回值中返回端口。
    @Value("${server.port}")
    Integer port;

    @GetMapping("/hello")
    public String hello(){
        return "hello cloud"+port;
    }
}

.java


.java


.java


.java


.java


.java


.java


.java


.java


.java


.java


.java


.java


.java


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值