一、创建公用的部分提出到一个公共的项目中gmail-interface
还是应用上一篇文章的gmail-interface这个公用的项目 代码不变
二、服务提供者boot-user-service-provider
项目结构如下
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>com.atguigu</groupId>
<artifactId>boot-user-service-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<name>boot-user-service-provider</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.atguigu.gmail</groupId>
<artifactId>gmail-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
application.yml
# 注册中心
dubbo.application.name=user-service-provier
dubbo.registry.address=10.5.96.48:2181
dubbo.registry.protocol=zookeeper
#通信协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#监控中心,去注册中心自动发现
dubbo.monitor.protocol=registry
服务提供者的具体实现UserService.java
package com.atguigu.gmail.service.impl;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.atguigu.gmail.bean.UserAddress;
import com.atguigu.gmail.service.UserService;
@Component //这个是Spring 的注解将组件放入到IOC
@Service //这个是dubbo 的注解用于暴露服务的
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1,"东长安街89号","1","王老师","13278977","1");
UserAddress address2 = new UserAddress(2,"西长安街90号","1","李老师","13278988","1");
return Arrays.asList(address1,address2);
}
}
程序的主启动类服务提供者ProviderApp.java
package com.atguigu.gmail;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
/**
* 1.导入依赖
* 1)导入dubbo-starter
* 2)导入dubbo的其它依赖
* @author Administrator
*/
@EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class ProviderApp
{
public static void main( String[] args )
{
SpringApplication.run(ProviderApp.class, args);
}
}
三、服务消费者boot-order-service-consumer
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>com.atguigu</groupId>
<artifactId>boot-order-service-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>boot-order-service-consumer</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 消费者是一个web项目 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.atguigu.gmail</groupId>
<artifactId>gmail-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo-starter的依赖-->
<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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
application.yml
server.port=8083
dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://10.5.96.48:2181
dubbo.monitor.protocol=registry
消费者订单实现类OrderServiceImpl.java
package com.atguigu.gmail.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.atguigu.gmail.bean.UserAddress;
import com.atguigu.gmail.service.OrderService;
import com.atguigu.gmail.service.UserService;
/**
* 消费者订单实现类
* @author Administrator
*
*/
@Service
public class OrderServiceImpl implements OrderService{
// @Autowired
@Reference //dubbo帮我们远程引用这个服务,从注册中心发现
UserService userService;
public List<UserAddress> initOrder(String userId){
List<UserAddress> addressList = userService.getUserAddressList(userId);
System.out.println(addressList);
return addressList;
}
}
消费者OrderController.java
package com.atguigu.gmail.controller;
import java.util.List;
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 com.atguigu.gmail.bean.UserAddress;
import com.atguigu.gmail.service.OrderService;
@Controller
public class OrderController {
@Autowired
OrderService orderService;
/**
* 初始化订单
* 以json的形式返回数据
**/
@ResponseBody
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uid")String userId){
return orderService.initOrder(userId);
}
}
消费者主启动类ConsumerApp.java
package com.atguigu.gmail;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
/**
* 1.导入依赖
* 1)导入dubbo-start
* 2)导入dubbo的其它依赖
*/
@EnableDubbo
@SpringBootApplication
public class ConsumerApp
{
public static void main( String[] args )
{
SpringApplication.run(ConsumerApp.class,args);
}
}
先启动提供者,再启动消费者,然后看可视化控制台
有服务提供者,服务消费者,还有我们的监控中心
在我们本地浏览器输入下面的地址,可以看到返回的json数据
总结
1在pom文件中引入dubbo-starter的依赖
2.在application.yml中配置注册中心和dubbo
3.如果是暴露服务用dubbo的@Service 注解, 如果是消费服务用@Reference注解