springboot整合dubbo(xml形式)

dubbo是一个远程服务调用的分布式框架。让我们告别了webservice的wsdl调用方式,取而代之的是服务注册和服务消费模式。下面对dubbo的组成做一个简单的解释,为的是读者能更好的理解下面的代码
dubbo在结构上一共分为4个部分。
1 .provider:服务的提供者,将服务注册到Registry中,供外界调用。
2 .container:服务容器 ( 加载dubbo配置文件,将配置文件中的服务部署运行 )
3 .registry:服务的注册中心(本篇使用zookeeper)
3 .consumer:服务的消费者,消费提供者注册的服务。
4 .monitor:统计中心(主要统计服务的调用次数和调用时间)

上述4部分之间的关系为:(原图引自:springboot整合dubbo)
springboot整合dubbo(xml形式)_第1张图片
关于dubbo的详细介绍可以查看 dubbo的详细解释。文章写的很好,想详细了解dubbo,可以阅读这篇帖子。

首先我们在相应的提供者工程中需要导入dubbo的依赖


        
            com.alibaba
            dubbo
            
                
                    org.springframework
                    spring
                
            
            2.5.3
        
        
            org.apache.zookeeper
            zookeeper
            3.4.7
            
                
                    slf4j-log4j12
                    org.slf4j
                
            
        
        
        
            com.github.sgroschupf
            zkclient
            0.1
        

引入依赖之后,开始写提供者代码。

定义一个bean

public class UserCredenceInfoVO implements Serializable {
   
    private String uciFlowno;
    private String uniqueid;
    private String loginName;
    private String credenceClass;
    private String credenceAppend;
    private String credenceStatus;
}

dubbo是靠接口发布服务,写一个测试接口,用来发布。

public interface UserCredenceReadService {
    public UserInfoVO findUserInfoByLoginName(UserCredenceInfoVO userCredenceInfoInfoVO);
}

接口对应的实现类为:

@Service
public class UserCredenceReadServiceImpl implements UserCredenceReadService {
    @Override
    public UserInfoVO findUserInfoByLoginName(UserCredenceInfoVO userCredenceInfoInfoVO) {
        try {
            UserInfoVO userInfoVO = new UserInfoVO();
            String loginName = userCredenceInfoInfoVO.getLoginName();
            System.out.println(loginName);
    }
}

上面的@Service注解是Spring的注解,不是dubbo的。

之后,我们开始写xml文件,注册服务。


    

    
    
    
    
    

zk使用的是集群模式,如果是单机模式。zk地址写法为:


xml定义好之后,我们要在springboot的主类上扫描这个配置文件。

@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan(basePackages = "cn.org.meteor.comp")
@ImportResource("classpath:dubbo-provider.xml")
public class Application {
    /**
     * 核心启动类
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

关于如何搭建一个简单的springboot工程,可以看我之前的博客
搭建一个简单的springboot版的ssm框架
上面的工作完成后,我们的提供者就定义好了。
然后通过dubbo控制台服务治理模块就可以看到我们注册的服务。
springboot整合dubbo(xml形式)_第2张图片
dubbo的控制台,服务是一个dubbo-admin的war包。
如果需要下载这个war包,可以去这个博客,里面分享了一个地址可以下载。
dubbo-admin.war 下载

提供者搞定,下面我们开始写消费者,测试我们的提供者服务。

消费者消费服务,也需要接口支持,推荐的做法是将提供者的接口发布到nexus上。然后,消费者直接引用,很方便。

定义消费者xml文件


    
    
    
    
    
    


dubbo的超时时间默认为1000ms,这里定义为5000ms

在主类中扫描这个文件

@SpringBootApplication
@ImportResource("classpath:dubbo-consumer.xml")
public class Application {
    /**
     * 核心启动类
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

然后写一个测试类,测试我们是否可以调通发布的服务

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class TestUserCredence {
    @Autowired
    UserCredenceReadService userCredenceReadService;

    @Test
    public void test_userCredence() {
        UserCredenceInfoVO userCredenceInfoVO = new UserCredenceInfoVO();
        userCredenceInfoVO.setLoginName("wyy");
 		userCredenceReadService.findUserInfoByLoginName(userCredenceInfoVO);
    }
}

执行test方法,然后查看服务提供端是否打印了我们设置的登录名。
如果有什么问题,欢迎留言。

你可能感兴趣的:(技术博客,SpringBoot,dubbo,dubbo,springboot)