先注册好,然后进行调用,注册请看上篇博客
https://blog.csdn.net/weixin_42017951/article/details/107673301
Provider生产者-–不需要调用,service是给别人调用的,把方法的所有给别人调用,增加了dubbo层(其实就是封装的一层),其他业务逻辑都是在service和function里面实现
把自己的类放给别人用,新增一个dubbo层,调用自己的service层,dubbo层给别人用,需要在yml文件里面配置路径
消费者—consumer就是去调用别人,把别人的接口拿过来,这个包的路径就要和别人提供的包的路径一致,然后进行调用。
层级包括(controller层,service层 ,dao层,provider层)
provider层把远程调用的方法(是指common里面的service)注入进来,实现调用(无需任何逻辑),如果业务层需要远程调用,在业务层把provider注入进来,进行方法调用。
生产者:多一个dubbo层,暴露接口
消费者:多一层provider层,进行调用
生产者的common一定和消费者提供的common一致
层级关系永远是controller—service----实现类
先注册好两个大的maven项目,且两个大项目里面都要创建一个相同的子common项目
有两个大maven项目(provider:提供者和consumerone:消费者)
第一:提供者
如上图,为提供者Provider的文件架构图,子项目providertwo增加了dubbo层,dubbo层的接口对外提供,dubbo层的CompanyRpcServiceImpl实现了子项目common的CompanuRpcService接口
**在提供者provider项目的子项目providertwo中的application-dev文件里的base-packages的路径是dubbo包的路径
如何快速得到dubbo包的路径:右击dubbo,然后点击copy Reference **
application-dev文件里的base-packages指要暴露出去的接口地址
如上,有一点特重要的是在子项目providertwo的pom文件里面记得加子项目common的依赖
package com.aixiao.msj.common.service.auth;
public interface CompanuRpcService {
String test();
}
如上代码,是provoider项目下子项目common的接口CompanuRpcService代码。
package com.aixiao.msj.common.service.dubbo;
import com.aixiao.msj.common.service.auth.CompanuRpcService;
import org.apache.dubbo.config.annotation.Service;
@Service
public class CompanyRpcServiceImpl implements CompanuRpcService {
@Override
public String test() {
return "这一天,我开始仰望星空,发现~星星!!!";
}
}
如上代码,是provoider项目下子项目providertwo的dubbo层的CompanyRpcServiceImpl代码。
第二:消费者
如上图,为消费者的文件架构图
首先在consumerone消费者项目中,在子项目consumertwo中的application-dev文件里的base-packages的路径是dubbo包的路径,然后在pom文件里面加入common的依赖。
package com.aixiao.maj.web.server.service.provider;
import com.aixiao.msj.common.service.auth.CompanuRpcService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
@Component
public class CpmpanuRPCProvider {
@Reference(check = false,timeout = 30000)
private CompanuRpcService companuRpcService;
public String TestCom(){
//不需要业务逻辑,这是简单的调用
return companuRpcService.test();
}
}
如上,子项目consumertwo的provider层的CpmpanuRPCProvider的代码,是provider层把远程调用的方法(是指common里面的service层)注入进来,实现调用(无需任何逻辑)。
package com.aixiao.maj.web.server.service.service;
public interface EcoService {
String jason();
}
如上,这是EcoService接口的代码
package com.aixiao.maj.web.server.service.service.impl;
import com.aixiao.maj.web.server.service.provider.CpmpanuRPCProvider;
import com.aixiao.maj.web.server.service.service.EcoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EcoServceImpl implements EcoService {
@Autowired
private CpmpanuRPCProvider cpmpanuRPCProvider;
public String jason() {
//写业务的地方
return cpmpanuRPCProvider.TestCom();
}
}
如上,这是EcoServiceImpl的代码,这里调用了CpmpanuRPCProvider。
最后,在controller层里面测试
package com.aixiao.maj.web.server.service.controll;
import com.aixiao.maj.web.server.service.service.EcoService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/econtroller")
@Service
public class EcoController {
@Autowired
private EcoService ecoService;
@RequestMapping(value = "/msj/service",method = RequestMethod.GET)
public String Complain(){
return ecoService.jason();
}
}
如上,是controller层EcoController的代码。这里调用了service层的EcoService接口EcoService的实现类EcoServiceImpl调用了provider层的CpmpanuRPCProvider类,CpmpanuRPCProvider类进行了远程调用
然后用postman进行测试就好啦