使用Redis為註冊中心的Dubbo微服務架構(基於SpringBoot)

  • 2019 年 10 月 3 日
  • 筆記

title: ??Redis??????Dubbo????????SpringBoot?
date: 2019-07-30 14:06:29
categories:

  • ??
    author: mrzhou
    tags:
  • SpringBoot
  • redis
  • Dubbo
  • ???
  • RPC

??

Dubbo????????RPC???????????IT?????????????????????????????????????????????SpringBoot????
??Dubbo????zk?????????????Redis???

????

?????????Dubbo?Redis?????????????????????????????????????????
????????

  • ????(user-common)
  • ?????(user-provider)
  • ?????(user-consumer)

????

????????????????????????????????????????????????lombok????????????maven?????
pom.xml

<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>cn.miw.dubbo</groupId>      <artifactId>common</artifactId>      <version>0.0.1</version>      <dependencies>            <dependency>              <groupId>org.projectlombok</groupId>              <artifactId>lombok</artifactId>              <version>1.18.8</version>              <scope>provided</scope>          </dependency>        </dependencies>      <build>          <sourceDirectory>src</sourceDirectory>          <plugins>              <plugin>                  <artifactId>maven-compiler-plugin</artifactId>                  <version>3.8.0</version>                  <configuration>                      <source>1.8</source>                      <target>1.8</target>                  </configuration>              </plugin>          </plugins>      </build>  </project>

????
UserService.java

package cn.miw.dubbo.api;    import cn.miw.dubbo.model.User;    public interface UserService {      User findById(Integer id);  }

????
User.java

package cn.miw.dubbo.model;    import java.io.Serializable;    import lombok.Data;  import lombok.NoArgsConstructor;  @Data  @NoArgsConstructor  public class User implements Serializable{        private static final long serialVersionUID = -7001216319830050312L;      private Integer id;      private String name;      private int age;    }  

???????

?????????????????????????????????????????orm???????????????????????????????

  • pom.xml
<?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>      <parent>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-parent</artifactId>          <version>2.1.1.RELEASE</version>          <relativePath />      </parent>      <groupId>cn.miw.dubbo</groupId>      <artifactId>user-provider</artifactId>      <version>0.0.1</version>      <packaging>jar</packaging>      <name>demo</name>      <description>server</description>        <properties>          <java.version>1.8</java.version>      </properties>        <dependencies>          <!-- ?????? -->          <dependency>              <groupId>cn.miw.dubbo</groupId>              <artifactId>common</artifactId>              <version>0.0.1</version>          </dependency>          <!-- Dubbo??????? -->          <dependency>              <groupId>org.apache.commons</groupId>              <artifactId>commons-pool2</artifactId>          </dependency>          <!-- Redis ??? -->          <dependency>              <groupId>redis.clients</groupId>              <artifactId>jedis</artifactId>          </dependency>          <!-- Dubbo starter -->          <dependency>              <groupId>com.alibaba.boot</groupId>              <artifactId>dubbo-spring-boot-starter</artifactId>              <version>0.2.0</version>          </dependency>          <!-- Redis starter -->          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-data-redis</artifactId>          </dependency>        </dependencies>        <build>          <plugins>              <plugin>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-maven-plugin</artifactId>              </plugin>          </plugins>      </build>    </project>  

????SpringBoot?????????redis???????????????starter????????Dubbo?starter?????

????????????,????????@Service????????dubbo????,???????????????????????????????@Component?????????Spring???

  • UserServiceImpl.java
package cn.miw.dubbo.server.impl;    import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import org.springframework.stereotype.Component;    import com.alibaba.dubbo.config.annotation.Service;    import cn.miw.dubbo.api.UserService;  import cn.miw.dubbo.model.User;    @Service(version = "1.0")  @Component  public class UserServiceImpl implements UserService {        private static Logger log = LoggerFactory.getLogger(UserServiceImpl.class);        @Override      public User findById(Integer id) {          log.info("????ID?{}",id);          User user = new User();          user.setAge(10+id*2);          user.setName("??"+id);          user.setId(id);          return user;      }  }

??????????????????@EnableDubbo????????????web??????????java System.in.read();??????????

  • ServerApp.java
package cn.miw.dubbo.server;    import java.io.IOException;    import org.springframework.boot.SpringApplication;  import org.springframework.boot.autoconfigure.SpringBootApplication;    import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;    @SpringBootApplication  @EnableDubbo  public class ServerApp {        public static void main(String[] args) throws IOException {          SpringApplication.run(ServerApp.class, args);          System.in.read();      }    }

????????????????redis???????????????????dubbo????????:12345

  • application.yml
  dubbo:    application:      id: user-provider      name: user-provider      qosEnable: true      qosPort: 22223    registry:      address: redis://root:[email protected]:6379      protocol:      name: dubbo      port: 12345    spring:    application:      name: user-provider    

???????

??????????????????web?????

  • pom.xml
<?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>      <parent>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-parent</artifactId>          <version>2.1.1.RELEASE</version>          <relativePath />      </parent>      <groupId>cn.miw.dubbo</groupId>      <artifactId>consumer</artifactId>      <version>0.0.1</version>      <packaging>war</packaging>      <name>user-consumer</name>      <description>consumer</description>        <properties>          <java.version>1.8</java.version>      </properties>        <dependencies>          <!-- Dubbo?redis???? ?? -->          <dependency>              <groupId>cn.miw.dubbo</groupId>              <artifactId>common</artifactId>              <version>0.0.1</version>          </dependency>          <dependency>              <groupId>org.apache.commons</groupId>              <artifactId>commons-pool2</artifactId>          </dependency>          <dependency>              <groupId>redis.clients</groupId>              <artifactId>jedis</artifactId>          </dependency>          <dependency>              <groupId>com.alibaba.boot</groupId>              <artifactId>dubbo-spring-boot-starter</artifactId>              <version>0.2.0</version>          </dependency>          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-data-redis</artifactId>          </dependency>          <!-- Dubbo?redis???? ?? -->            <!-- Web?? -->          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-web</artifactId>          </dependency>        </dependencies>        <build>          <plugins>              <plugin>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-maven-plugin</artifactId>              </plugin>          </plugins>      </build>    </project>  

???????????????java??

  • ConsumerApp.java
package cn.miw.dubbo.consumer;    import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import org.springframework.boot.SpringApplication;  import org.springframework.boot.autoconfigure.SpringBootApplication;  import org.springframework.context.annotation.Bean;  import org.springframework.web.bind.annotation.GetMapping;  import org.springframework.web.bind.annotation.RestController;    import com.alibaba.dubbo.config.annotation.Reference;  import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;    import cn.miw.dubbo.api.UserService;    @SpringBootApplication  @EnableDubbo  @RestController  public class ConsumerApp {        public static void main(String[] args) {          SpringApplication.run(ConsumerApp.class, args);      }        @Reference(version = "1.0")      UserService userService;        private static Logger log = LoggerFactory.getLogger(ConsumerApp.class);        @GetMapping("/")      public Object index(Integer id) {          log.info("???ID?{},{}",id,(id==null)?0:id);          return userService.findById((id==null)?0:id);      }  }  

????

  • application.yml
dubbo:    application:      id: user-consumer      name: user-consumer      qosEnable: false      qosPort: 22224    registry:      address: redis://root:[email protected]:6379    consumer:      timeout: 3000      spring:    application:      name: user-consumer    

????

  • ??common??????????????????????????maven???????????????????install???????????????????????????????????
  • ?????????????????????????????????????
  • ????? ??????? http://localhost:8080/ ???????????????????????????????????????????

??

??????????????????????????????????????????????????????????????????????????????????????????????