在IDEA中创建spring-boot项目user-service-gmall以及两个module:user-service-provider、user-service-consumer。
父项目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.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.moon</groupId> <artifactId>user-service-gmall</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>user-service-gmall</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <defaultGoal>compile</defaultGoal> </build> <modules> <module>user-service-provider</module> <module>user-service-consumer</module> </modules> </project>
父项目中包含了接口和一个bean类
public class UserAddress implements Serializable { private Integer id; private String userAddress; //用户地址 private String userId; //用户id private String consignee; //收货人 private String phoneNum; //电话号码 private String isDefault; //是否为默认地址 Y-是 N-否 public UserAddress() { super(); // TODO Auto-generated constructor stub } public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum, String isDefault) { super(); this.id = id; this.userAddress = userAddress; this.userId = userId; this.consignee = consignee; this.phoneNum = phoneNum; this.isDefault = isDefault; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getConsignee() { return consignee; } public void setConsignee(String consignee) { this.consignee = consignee; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public String getIsDefault() { return isDefault; } public void setIsDefault(String isDefault) { this.isDefault = isDefault; } } public interface OrderService { /** * 初始化订单 * @param userId */ public List<UserAddress> initOrder(String userId); } public interface UserService { /** * 按照用户id返回所有的收货地址 * @param userId * @return */ public List<UserAddress> getUserAddressList(String userId); }
user-service-provider module:
pom.xml文件中添加:
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <!--dubbo springboot--> <dependency> <groupId>com.moon</groupId> <artifactId>user-service-gmall</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--父项目依赖 -->
UserServiceImpl实现类:
import com.alibaba.dubbo.config.annotation.Service; import com.moon.userservicegmall.bean.UserAddress; import com.moon.userservicegmall.service.UserService; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; @Service//暴露服务 @Component public class UserServiceImpl implements UserService { @Override public List<UserAddress> getUserAddressList(String userId) { System.out.println("UserServiceImpl.....old..."); // TODO Auto-generated method stub UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y"); UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N"); return Arrays.asList(address1,address2); } }
application.properties
dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20882
dubbo.monitor.protocol=registry
#dubbo.scan.base-packages=com.moon #与@EnableDubbo功能相同
user-service-consumer
pom文件同上,OrderServiceImpl文件内容:
import com.alibaba.dubbo.config.annotation.Reference; import com.moon.userservicegmall.bean.UserAddress; import com.moon.userservicegmall.service.OrderService; import com.moon.userservicegmall.service.UserService; import org.springframework.stereotype.Service; import java.util.List; @Service public class OrderServiceImpl implements OrderService { //@Autowired @Reference UserService userService; @Override public List<UserAddress> initOrder(String userId) { // TODO Auto-generated method stub System.out.println("用户id:"+userId); //1、查询用户的收货地址 List<UserAddress> addressList = userService.getUserAddressList(userId); for (UserAddress u:addressList ) { System.out.println(u.getId()+" "+u.getUserAddress()); } return addressList; } }
controller文件
import com.moon.userservicegmall.bean.UserAddress; import com.moon.userservicegmall.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller public class OrderController { @Autowired OrderService orderService; @ResponseBody @RequestMapping("/initOrder") public List<UserAddress> initOrder(@RequestParam("uid")String userId) { System.out.println("ok!"); return orderService.initOrder(userId); // return null; } }
application.properties文件
server.port=8081 dubbo.application.name=user-service-consumer dubbo.registry.address=127.0.0.1:2181 dubbo.registry.protocol=zookeeper dubbo.monitor.protocol=registry
分别启动生产者与消费者,访问http://localhost:8081/initOrder?uid=1。
遇到问题
消费者无法注册到注册中心,问题的缘由是在OrderServiceImpl类上忘记使用了org.springframework.stereotype.Service注解,导致不能使用AutoWired自动注入。