Springboot+dubbo+maven搭建多模块项目(二)-代码编写

接着上一篇项目架构的布局,下面我们一起来实践下dubbo服务端及客户端的简单设置,以及在dubbo admin中查看服务的注册及消费情况
1 dubbo环境搭建
dubbo环境的搭建可参考文章环境搭建:https://blog.csdn.net/qq_41820981/article/details/88537399 包括基于docker的zookeeper安装及dubbo admin的安装。
2 dubbo服务提供方配置
Springboot+dubbo+maven搭建多模块项目(二)-代码编写_第1张图片
2.1 创建xml配置文件
不能直接在spring boot默认的配置文件application.properties中配置dubbo的属性,因为spring boot官方没有dubbo对应的starter,所以spring boot不能解析dubbo的属性。有网友编写了spring-boot-starter-dubbo,让我们可以使用spring boot的方式方便地开发dubbo程序,有需要的同学可以去了解一些。
本文实践的目的,是为了学习dubbo在spring boot中的配置,不是更方便地开发,所以我们这里还是选用原始的xml配置文件的方式来进行dubbo的配置,然后使用@ImportResource注解来加载xml配置。
下面是服务提供方的配置文件provider.xml。
有两种方式可以暴露dubbo服务,一是通过注解方式,二是通过xml配置方式,区别就在最后几行配置上。
使用注解方式,在类上打@service注解,就必须要用dubbo:annotation指定启动扫描路径。下面的provider.xml使用就是这种方式。
使用xml配置方式用dubbo:service申明要暴露的单个接口,就不需要再指定dubbo:annotation了。
provider.xml配制




















**2.2 创建测试接口及测试类** 服务提供方提供一个checkItemStatus方法,用来检查一个商品是否可售。 接口定义类 ItemService.java

package com.example.demo.service;

public interface ItemService {
//检查商品是否可售
boolean checkItemStatus(String id);
}
接口实现类 ItemServiceImpl.java

package com.example.demo.service;

import com.alibaba.dubbo.config.annotation.Service;
//@Service //该Service注解是dubbo的注解,不是spring的。若使用xml配置方式暴露接口,则不需要该注解。
public class ItemServiceImpl implements ItemService {

@Override
public boolean checkItemStatus(String id) {
    if (id.contains("111")) {
        return true;
    } else {
        return false;
    }
}

}
2.3 编写启动类
启动类 SpringbootDubboServerApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(“classpath:provider.xml”) //加载xml文件
public class SpringbootDubboServerApplication {

public static void main(String[] args) throws InterruptedException {
SpringApplication.run(SpringbootDubboServerApplication.class, args);
Thread.sleep(Long.MAX_VALUE); //pom中没有加spring-boot-starter-web依赖,启动时没有tomcat容器,会自动退出,所以加了一个sleep防止自动退出
}
}
Springboot+dubbo+maven搭建多模块项目(二)-代码编写_第2张图片
3 dubbo服务消费方配置
Springboot+dubbo+maven搭建多模块项目(二)-代码编写_第3张图片
3.1 创建xml配置文件
创建远程服务代理和暴露dubbo服务一样,也有两种方式,一是使用注解方式,二是使用xml配置方式。下面的consumer.xml中使用的是第一种方式。如果使用xml配置方式创建远程服务代理,将dubbo:annotation一行替换成如下配置即可。
consumer.xml配制
















**3.2 创建测试类** ItemController.java

package com.example.demo.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.example.demo.service.ItemService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ItemController {

//注入服务提供方暴露的接口,通过@Reference注解,dubbo会在扫描的时候自动代理接口,然后通过rpc调用远程服务。
//如果用xml配置方式,需要将@Reference换成@Autowired。
@Reference

// @Autowired
ItemService itemService;

@RequestMapping("/canbuy")
public String canBuy(@RequestParam("id") String id){
    System.out.println(id);
    boolean flag = itemService.checkItemStatus(id);
    if (flag) {
        return "can buy!";
    } else {
        return "can not buy!";
    }
}

}
3.3 编写启动类
SpringbootDubboClientApplication.java

package com.example.demo.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(“classpath:consumer.xml”) //加载xml配置文件
public class SpringbootDubboClientApplication {

public static void main(String[] args) throws Exception{
    SpringApplication.run(SpringbootDubboClientApplication.class, args);
}

}
debug启动
Springboot+dubbo+maven搭建多模块项目(二)-代码编写_第4张图片
Springboot+dubbo+maven搭建多模块项目(二)-代码编写_第5张图片
4 测试
我们先后运行SpringbootDubboServerApplication.java和SpringbootDubboClientApplication.java,启动dubbo服务提供方和调用方。
在浏览器中输入dubbo admin的安装地址,如127.0.0.1:8089,打开dubbo admin界面,在服务治理-服务界面,可以看到我们注册的dubbo服务。状态“正常”,表示提供者和消费者都有。如果有乙方没有,在状态栏都会显示出来。
Springboot+dubbo+maven搭建多模块项目(二)-代码编写_第6张图片
在这里插入图片描述
温馨提示:最后如何有访问不到的情况,原因是8080端口占用,请把tomcat端口号修改为8081!谢谢(查看https://blog.csdn.net/qq_41820981/article/details/88537399 )

你可能感兴趣的:(java技术)