使用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/ ???????????????????????????????????????????
??
??????????????????????????????????????????????????????????????????????????????????????????????
