• Producer & Consumer


    需要与Eureka结合使用

    Eureka环境搭建

    Producer

    一、pom文件

    <?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>peter.test</groupId>
        <artifactId>producer1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>producer1</name>
        <description>Demo project for Spring Eureka Producer</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.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>10</java.version>
            <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>2.3.0</version>
            </dependency>
    
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</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>
    
    
    </project>
    View Code

    二、application.yml文件

    ---
    spring:
      application:
        name: spring-cloud-producer
      profiles: producer1
    server:
      port: 9010
    eureka:
      instance:
        hostname: peterhost1
        #ip-address: 127.0.0.1
        #prefer-ip-address: true
      client:
        service-url:
          defaultZone: http://peterhost1:9000/eureka/
    View Code

    三、启动注解与Rest Controller

    @SpringBootApplication
    @EnableDiscoveryClient
    @ComponentScan({"peter.test.producer1","Service"})
    public class Producer1Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Producer1Application.class, args);
        }
    }
    
    @RestController
    class TestController{
    
        @RequestMapping("/test")
        public String index(){
            return "peter host.";
        }
    
        @RequestMapping("/test2")
        public String index(@RequestParam String name) {
            return "hello "+name+",this is first messge";
        }
    
    }
    View Code

    Consumer

    一、pom文件

    <?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>peter.test</groupId>
        <artifactId>consumer1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>consumer1</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.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>10</java.version>
            <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>2.3.0</version>
            </dependency>
    
            <!--
            Monitor
            -->
    
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix-dashboard -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
            <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    
            <!--
            turbine
            -->
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-netflix-turbine -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-turbine</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-turbine -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
            </dependency>
    
    
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</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>
    
    
    </project>
    View Code

    二、application.yml文件

    ---
    spring:
      application:
        name: spring-cloud-consumer1
      profiles: consumer1
    server:
      port: 9021
    feign:
      hystrix:
        enabled:true
    eureka:
      instance:
        hostname: peterhost1
      client:
        service-url:
          defaultZone: http://peterhost1:9000/eureka/
    View Code

    三、FeignClient请求Producer

    @FeignClient(name= "spring-cloud-producer",fallback =Producer1ServiceHelloHystrix.class)
    @Component
    public interface Producer1Service {
    
        @RequestMapping(value = "/hello")
        public String hello(@RequestParam(value = "name") String name);
    
    
    }
    View Code

    name="spring-cloud-producer" 指明producer在Eureka中注册的服务名称

    四、Hystrix断路器实现

    @Component
    public class Producer1ServiceHelloHystrix implements  Producer1Service{
    
        @Override
        public String hello(String name) {
            return "hello" +name+", this messge from hystrix. ";
        }
    }
    View Code

    五、Consumer对外提供的Controller

    @RestController
    public class ConsumerController {
    
        @Autowired
        Producer1Service producer1Service;
    
        @RequestMapping("/hello/{name}")
        public String index(@PathVariable("name") String name) {
            System.out.println("log begin
    ");
            String remoteResult="Air";
            System.out.println(producer1Service.toString());
    
            try
            {
                if(producer1Service==null)   {
                    remoteResult="Null remote service.";
    
                    System.out.println("Null remote service.
    ");
                }
                else
                    remoteResult=producer1Service.hello(name);
            }
            catch (Exception ex){
                remoteResult+="
    "+ex.getMessage()+ex.getCause()+ex.getStackTrace().toString();
            }
    
            return remoteResult;
        }
    
        @Autowired
        private DiscoveryClient discoveryClient;
    
        @RequestMapping("/service-instances/{applicationName}")
        public List<ServiceInstance> serviceInstancesByApplicationName(
                @PathVariable String applicationName) {
            return this.discoveryClient.getInstances(applicationName);
        }
    
    }
    View Code

    六、运行

    负载均衡

    新建一个Producer的项目,为了区分把Controller中返回的信息做一些调整即可

    一、application.yml文件

    ---
    spring:
      application:
        name: spring-cloud-producer
      profiles: producer2
    server:
      port: 9011
    eureka:
      instance:
        hostname: peterhost2
        #ip-address: 127.0.0.1
        #prefer-ip-address: true
      client:
        service-url:
          defaultZone: http://peterhost2:9001/eureka/
    View Code

    spring.application.name要和前面一个producer的一样,此处是spring-cloud-producer

    二、运行

    新的Producer注册至Eureka会有一定的延迟

  • 相关阅读:
    深入理解javascript原型和闭包(5)——instanceof
    深入理解javascript原型和闭包(4)——隐式原型
    启动mongodb的方式
    继承的几种方式
    npm install express 安装失败
    npm insta --savell和npm install --save-dev的区别
    express笔记之一安装
    mongoVUE安装配置
    nodejs笔记之一简介
    nodejs配置之二NPM配置之gulp使用时出现的错误
  • 原文地址:https://www.cnblogs.com/dopeter/p/9404796.html
Copyright © 2020-2023  润新知