SpringCloud 消费者和提供者

SpringCloud 消费者和提供者

​ sprincloud是基于微服务架构思想的框架,它提供了多种组件来解决微服务带来的的一些列问题,因此可以把它看做是一个生态,在微服务架构中,每一个微服务都是一个小的项目,服务之间必然存在接口调用,通常把接口提供方

称为为提供者,接口调用方称为消费者。

1.创建一个微服务提供者

image-20201014001459199

对应代码如下

@RestController
public class DeptController {
    
    

    @Autowired
    DeptService deptService;

    @Autowired
    DiscoveryClient discoveryClient;

    @RequestMapping("/dept/add")
    public boolean addDept(Dept dept) {
    
    
        return deptService.addDept(dept);
    }

    @RequestMapping("/dept/get/{id}")
    public Dept queryDeptById(@PathVariable("id") int id) {
    
    
        return deptService.queryDeptById(id);
    }

    @RequestMapping("/dept/list")
    public List<Dept> queryAllDept() {
    
    
        return deptService.queryAllDept();
    }

    @RequestMapping("/dept/discovery")
    public Object discovery() {
    
    
        //获取注册的服务列表清单
        List<String> services = discoveryClient.getServices();
        System.out.println("所有注册的服务为:"+services);

        List<ServiceInstance> instances = discoveryClient.getInstances("springcloud-provider-dept");

        for (ServiceInstance instance : instances) {
    
    

            System.out.println(
                    instance.getHost()+"/t"+
                    instance.getPort()+"/t"+
                    instance.getUri()+"/t"+
                    instance.getServiceId() );
        }

        return this.discoveryClient;

    }


}
@Mapper
@Repository
public interface DeptDao {
    
    

    public boolean addDept(Dept dept);

    public Dept queryDeptById(int id);

    public List<Dept> queryAllDept();
}
public interface DeptService {
    
    

    public boolean addDept(Dept dept);

    public Dept queryDeptById(int id);

    public List<Dept> queryAllDept();
}
@Service
public class DeptServiceImpl implements  DeptService {
    
    

    @Autowired
    DeptDao deptDao;

    public boolean addDept(Dept dept) {
    
    
        return deptDao.addDept(dept);
    }

    public Dept queryDeptById(int id) {
    
    
        return deptDao.queryDeptById(id);
    }

    public List<Dept> queryAllDept() {
    
    
        return deptDao.queryAllDept();
    }
}
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class Provider_dept_8001 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(Provider_dept_8001.class,args);
    }

}

DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huang.dao.DeptDao">


    <insert id="addDept" parameterType="Dept">

        insert into dept(dname,db_source)
        values (#{dname},DATABASE())
   </insert>

    <select id="queryDeptById" resultType="Dept" parameterType="int">
       select * from  dept where  dno = #{dno}
    </select>


    <select id="queryAllDept" resultType="Dept" >
       select * from  dept
    </select>
</mapper>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
      </settings>
</configuration>

application.yml

server:
  port: 8081

mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: com.huang.pojo
  config-location: classpath:mybatis/mybatis-config.xml

spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    username: root
    password: 123456
    url: jdbc:mysql://192.168.43.155:3306/db01?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

#配置注册中心
eureka:
  client:
    service-url:
       defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7001.com:7001/eureka/
  instance:
    instance-id: springcloud-provider-dept8001  #修改eureka上的默认描述信息


info:
   app.name: testProvider
   company.name: testProvider

2.创建一个微服务消费者

image-20201014002310688

代码如下:

@Configuration
public class ConsumerConfig {
    
    

    @Bean
    public RestTemplate restTemplate(){
    
    
        return  new RestTemplate();
    }
}
//消费者不应该有service层
@RestController
public class DeptConsumerController {
    
    

    //提供的访问服务提供者模板类,注册后直接使用
    @Autowired
    RestTemplate restTemplate;
    //服务提供者访问前缀
    public static final String URL_PREFIX = "http://localhost:8081";

    @RequestMapping("consumer/dept/add")
    public boolean addDept(Dept dept) {
    
    
        return restTemplate.postForObject(URL_PREFIX+"/dept/add",dept,Boolean.class);
    }

    @RequestMapping("consumer/dept/get/{id}")
    public Dept queryDeptById(@PathVariable("id") int id) {
    
    

        return restTemplate.getForObject(URL_PREFIX+"/dept/get/"+id,Dept.class);
    }

    @RequestMapping("consumer/dept/list")
    public List<Dept> queryAllDept() {
    
    
        return restTemplate.getForObject(URL_PREFIX+"/dept/list",List.class);
    }
}
@SpringBootApplication
public class Consumer_dept_80 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(Consumer_dept_80.class,args);
    }

}

3.访问http://localhost/consumer/dept/list测试(不经过注册中心)

image-20201014003031239

image-20201014003045810

父项目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>com.huang</groupId>
    <artifactId>spring-cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>springcloud-api</module>
        <module>springcloud-provider-dept-8001</module>
        <module>springcloud-consumer-dept-80</module>
        <module>springcloud-eureka-7001</module>
        <module>spring-cloud-eureka-7002</module>
        <module>spring-cloud-eureka-7003</module>
    </modules>

    <!--打包方式-->
    <packaging>pom</packaging>

    <dependencyManagement>
       <dependencies>
           <!--springcloud依赖-->
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Greenwich.SR1</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!--spring-boot依赖-->
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-dependencies</artifactId>
               <version>2.1.4.RELEASE</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!--数据库-->
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>5.1.46</version>
           </dependency>
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>druid</artifactId>
               <version>1.1.16</version>
           </dependency>
           <!--mybatis-->
           <dependency>
               <groupId>org.mybatis.spring.boot</groupId>
               <artifactId>mybatis-spring-boot-starter</artifactId>
               <version>2.1.1</version>
           </dependency>
           <!--lombok-->
           <dependency>
               <groupId>org.projectlombok</groupId>
               <artifactId>lombok</artifactId>
               <version>1.18.4</version>
           </dependency>

           <!--日志-->
           <dependency>
               <groupId>ch.qos.logback</groupId>
               <artifactId>logback-core</artifactId>
               <version>1.2.3</version>
           </dependency>
           <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>4.12</version>
           </dependency>
           <dependency>
               <groupId>log4j</groupId>
               <artifactId>log4j</artifactId>
               <version>1.2.17</version>
           </dependency>

       </dependencies>

    </dependencyManagement>


</project>

提供者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">
    <parent>
        <artifactId>spring-cloud</artifactId>
        <groupId>com.huang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-provider-dept-8001</artifactId>

    <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.huang</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>

        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>

        </dependency>
        <!--数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
    </dependencies>
</project>

消费者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">
    <parent>
        <artifactId>spring-cloud</artifactId>
        <groupId>com.huang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-consumer-dept-80</artifactId>


<dependencies>
    <dependency>
        <groupId>com.huang</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

</project>

猜你喜欢

转载自blog.csdn.net/qq_34429554/article/details/109104231