
目录
提供服务者(user)
步骤1、配置提供者
步骤2、暴露服务
步骤3、开启基于注解的 dubbo 功能
消费者(order)
步骤1、配置消费者
步骤2、远程调用服务
消费者接入层——>调用公共接口——>消费者接口实现类
步骤3、开启基于注解的 dubbo 功能
步骤4、运行效果
提供服务者(user) 步骤1、配置提供者
application.properties
步骤2、暴露服务#提供者配置 dubbo.application.name=boot-user-service-provider #dubbo.registry.protocol=zookeeper #dubbo.registry.address=127.0.0.1:2181 #上面两个也可写成一个 dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.scan.base-package=com.atguigu.gmall dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.monitor.protocol=registry #application.name就是服务名,不能跟别的dubbo提供端重复 #registry.protocol 是指定注册中心协议 #registry.address 是注册中心的地址加端口号 #protocol.name 是分布式固定是dubbo,不要改。 #base-package 注解方式要扫描的包
UserServiceImpl
//方式一:dubbo和spring中的Service注解
//@com.alibaba.dubbo.config.annotation.Service
//@Service
//方式二:dubbo的Service注解、spring的Component注解
@Service //暴露服务【dubbo的注解】
@Component
public class UserServiceImpl implements UserService {
@Override
public List getUserAddressList(String userId) {
System.out.println("UserServiceImpl......");
// TODO Auto-generated method stub
UserAddress address1 = new UserAddress(1, "北京市昌平区xxx",
"1", "李老师", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市宝安区xxx",
"1", "王老师", "010-56253825", "N");
return Arrays.asList(address1,address2);
}
}
步骤3、开启基于注解的 dubbo 功能
UserServiceProviderApplication.java
@EnableDubbo //开启基于注解的 dubbo 功能
@SpringBootApplication
public class UserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceProviderApplication.class, args);
}
}
消费者(order)
步骤1、配置消费者
步骤2、远程调用服务 消费者接入层——>调用公共接口——>消费者接口实现类#配置消费者 #web服务,修改默认tomact的服务端口8080为8081 #因为它会与监控中心的端口号起冲突 server.port=8081 #消费者配置: dubbo.application.name=boot-order-service-consumer dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.monitor.protocol=registry #dubbo.registry.protocol=zookeeper #dubbo.scan.base-package=com.atguigu.gmall #dubbo.protocol.name=dubbo #dubbo.protocol.port=20880 #application.name就是服务名,不能跟别的dubbo提供端重复 #registry.protocol 是指定注册中心协议 #registry.address 是注册中心的地址加端口号 #protocol.name 是分布式固定是dubbo,不要改。 #base-package 注解方式要扫描的包
OrderController.java【消费者接入层】
@Controller
public class OrderController {
@Autowired
OrderService orderService;
//http://localhost:8081/initOrder?uid=1
@ResponseBody
@RequestMapping("/initOrder")
public List initOrder(@RequestParam("uid")String userId) {
return orderService.initOrder(userId);
}
}
OrderService.java【公共接口】
public interface OrderService {
public List initOrder(String userId);
}
OrderServiceImpl.java【消费者接口实现类】
@Service
public class OrderServiceImpl implements OrderService {
//Field userService in com.atguigu.gmall.service.impl.OrderServiceImpl
//required a bean of type 'com.atguigu.gmall.service.UserService' that could not be found.
//@Autowired
@Reference //不用自动注入,Dubbo提供远程调用服务的注解,它会自己去注册中心查看
UserService userService;
@Override
public List initOrder(String userId) {
// TODO Auto-generated method stub
System.out.println("用户id:"+userId);
//1、查询用户的收货地址
//如果把 用户模块 项目打成jar包,直接依赖进来!
//那么这就不是分布式开发了,它是单体应用模式!
//有可能除了订单应用,其他应用也需要用户接口,总不能每个应用都写一遍代码,
//麻烦和冗余,官网也建议我们分包,把公共的放在一起。
//我们可以把用户的 bean文件和service接口 提取放在里面.
//我们引用了 UserService 接口,但是它的实现在别的工程里面,而且有可能在别的服务器上面,
//所以调 getUserAddressList 方法,我们需要远程去调用
if(!StringUtils.isEmpty(userId)) {
List addressList = userService.getUserAddressList(userId);
for (UserAddress userAddress : addressList) {
System.out.println(userAddress.getUserAddress());
}
return addressList;
}
return null;
}
}
步骤3、开启基于注解的 dubbo 功能
@EnableDubbo//开启基于注解的 dubbo 功能
@SpringBootApplication
public class OrderServiceConsumerYyhApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceConsumerYyhApplication.class, args);
}
}
步骤4、运行效果
http://localhost:8081/initOrder?uid=1
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)