Dubbo初次使用(广播形式)

Dubbo初次使用

分布式项目把所有的模块都拆分成了独立的项目,分为业务层、服务层。
而业务层和服务层没有在一个项目中,无法直接连接,而其他的项目可以项目依赖,直接导入依赖即可,这就出现了一个问题,业务层访问service层时,因为没有相互依赖,找不到对应的类,这是我们就需要使用Dubbo作为中间件。

自己理解:

首先在服务层配置dubbo,把service实现类和interface绑定一起,放入dubbo设置好的广播中,而web访问时,也需要配置dubbo,通过interface,获取广播中的实现类对象,并取一个id名,这个id要和web层引入的service的接口名保持一致,就可以获取到了

使用步骤

1.导入依赖

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>${
    
    dubbo-version}</version>
      <!--dubbo默认依赖spring2.5.6,有依赖冲突-->
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

dubbo默认依赖spring,会与我们导入的spring依赖产生冲突,所以需要排除掉。

2.配置服务层接口

package com.ceh.back.service;

public interface TestService {
    
    
    /**
     * 测试dubbo
     * @return
     */
    String getNow();
}

在搭建项目结构时,需要把接口单独的提出来,形成单独的项目,dubbo官网中提出希望这样做,因为不管是web层还是服务层,都需要通过这个接口来绑定。

3.声明服务(service实现类)

@Service
public class TestServiceImpl implements TestService {
    
    

    @Autowired
    private TestDao testDao;


    @Override
    public String getNow() {
    
    
        Date date = testDao.getNow();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String now = sdf.format(date);
        return now;
    }
}

4.配置服务到dubbo

 <!--配置dubbo:广播的形式(把所有的服务全部暴露在一个地方,需要使用服务就去这里找)-->
    <!--配置服务方名称(随便写,但是要保持唯一)-->
    <dubbo:application name="taotao-back-service"/>
    <!--广播的地址,所有的服务会暴露在这里-->
    <dubbo:registry address="multicast://224.5.6.7:1234"/>
    <!--dubbo的端口号-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!--配置服务的提供方(service的实现类,已经使用了注解,就不需要再声明了)-->
    <!--<bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>-->
    <!--注册服务
    interface:注册的接口,因为web层也引入了interface的依赖,这里直接声明,web就可以直接注入
    ref:引入你服务的类(service的实现类)-->
    <dubbo:service interface="com.ceh.back.service.TestService" ref="testServiceImpl"/>

最后一行配置,就是把服务层实现类和接口绑定一起,放入dubbo中,注册,这样dubbo就存在了这个服务。

5.配置web层

@RestController
public class TestController {
    
    


    @Autowired
    private TestService testService;

    @RequestMapping("/getNow")
    public String getNow(){
    
    
        String now = testService.getNow();
        return now;
    }
}

在使用@Autowired注解的时候,因为service和web分开了,导致这个地方注入不进去,就需要使用dubbo。

springmvc.xml文件配置

<!--配置dubbo-->
    <!--配置消费方名称(随便写,但唯一)-->
    <dubbo:application name="taotao-back-web"/>
    <!--广播服务存放地址-->
    <dubbo:registry address="multicast://224.5.6.7:1234"/>
    <!--消费
    id:对应web引入service服务的名称(autowired)
    interface:你在web层需要引入的接口
    这样dubbo就会把广播中对应的接口实现类给消费者-->
    <dubbo:reference id="testService"  interface="com.ceh.back.service.TestService"/>

做种通过最后一行配置,把dubbo中存在的服务,赋值给id,此时id要和web层引入service接口名保持一致,这是web就接收到了服务层对象。

遇到的问题:

在applicationContext-service.xml和springmvc.xml文件配置dubbo时,因为没有头文件,会报错,idea可以直接生成对应的头文件,但是如果只声明了xmlns:dubbo=“http://code.alibabatech.com/schema/dubbo”
就会出现“找不到dubbo:application的声明”的错误,从新删掉上面的头文件,再从新生成,看看是否最后会出现这样http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd,的声明文件,声明出来报错解决。(不知道为什么idea第一次不会自动的生成下面的地址)

采用直联的形式(一般用于测试、开发环境)

只需要在上边广播的形式上,修改配置文件即可

applicationContext-service.xml

<!--配置dubbo:广播的形式(把所有的服务全部暴露在一个地方,需要使用服务就去这里找)-->
    <!--配置服务方名称(随便写,但是要保持唯一)-->
    <dubbo:application name="taotao-back-service"/>
    <!--dubbo的端口号-->
    <dubbo:registry address="N/A"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <!--注册服务
    interface:注册的接口,因为web层也引入了interface的依赖,这里直接声明,web就可以直接注入
    ref:引入你服务的类(service的实现类)-->
    <dubbo:service interface="com.ceh.back.service.TestService" ref="testServiceImpl"/>

springmvc.xml

<!--配置dubbo-->
    <!--配置消费方名称(随便写,但唯一)-->
    <dubbo:application name="taotao-back-web"/>
    <!--消费
    id:对应web引入service服务的名称(autowired)
    interface:你在web层需要引入的接口
    这样dubbo就会把广播中对应的接口实现类给消费者-->
    <dubbo:reference url="dubbo://127.0.0.1:20880" id="testService"  interface="com.ceh.back.service.TestService"/>

猜你喜欢

转载自blog.csdn.net/weixin_43431123/article/details/112133732
今日推荐