1.RPC两个核心模块,通讯,序列化。
2.RPC框架有很多如:
dubbo,gRPC,Thrift,HSF.
用maven 命令打包
客户端配置
maven依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency>
application.properties
server.port=8081 dubbo.application.name=boot-order-service-consumer dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.monitor.protocol=registry
启动类
@EnableDubbo @EnableHystrix @SpringBootApplication public class BootOrderServiceConsumerApplication { public static void main(String[] args) { SpringApplication.run(BootOrderServiceConsumerApplication.class, args); } }
controller
@Controller public class OrderController { @Autowired OrderService orderService; @ResponseBody @RequestMapping("/initOrder") public List<UserAddress> initOrder(@RequestParam("uid")String userId) { return orderService.initOrder(userId); } }
service
/** * 1、将服务提供者注册到注册中心(暴露服务) * 1)、导入dubbo依赖(2.6.2)\操作zookeeper的客户端(curator) * 2)、配置服务提供者 * * 2、让服务消费者去注册中心订阅服务提供者的服务地址 * @author lfy * */ @Service public class OrderServiceImpl implements OrderService { //@Autowired @Reference(loadbalance="random",timeout=1000) //dubbo直连 UserService userService; @HystrixCommand(fallbackMethod="hello") @Override public List<UserAddress> initOrder(String userId) { // TODO Auto-generated method stub System.out.println("用户id:"+userId); //1、查询用户的收货地址 List<UserAddress> addressList = userService.getUserAddressList(userId); return addressList; } public List<UserAddress> hello(String userId) { // TODO Auto-generated method stub return Arrays.asList(new UserAddress(10, "测试地址", "1", "测试", "测试", "Y")); } }
服务端
application.properties
dubbo.application.name=user-service-provider dubbo.registry.address=127.0.0.1:2181 dubbo.registry.protocol=zookeeper # dubbo.protocol.name=dubbo dubbo.protocol.port=20881 dubbo.monitor.protocol=registry
启动类
/** * 1、导入依赖; * 1)、导入dubbo-starter * 2)、导入dubbo的其他依赖 * @author lfy * * SpringBoot与dubbo整合的三种方式: * 1)、导入dubbo-starter,在application.properties配置属性,使用@Service【暴露服务】使用@Reference【引用服务】 * 2)、保留dubbo xml配置文件; * 导入dubbo-starter,使用@ImportResource导入dubbo的配置文件即可 * 3)、使用注解API的方式: * 将每一个组件手动创建到容器中,让dubbo来扫描其他的组件 */ //@EnableDubbo //开启基于注解的dubbo功能 //@ImportResource(locations="classpath:provider.xml") @EnableDubbo(scanBasePackages="com.atguigu.gmall") @EnableHystrix //开启服务容错 @SpringBootApplication public class BootUserServiceProviderApplication { public static void main(String[] args) { SpringApplication.run(BootUserServiceProviderApplication.class, args); } }
mydubboconfig
package com.atguigu.gmall.config; import java.util.ArrayList; import java.util.List; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.MethodConfig; import com.alibaba.dubbo.config.MonitorConfig; import com.alibaba.dubbo.config.ProtocolConfig; import com.alibaba.dubbo.config.ProviderConfig; import com.alibaba.dubbo.config.RegistryConfig; import com.alibaba.dubbo.config.ServiceConfig; import com.atguigu.gmall.service.UserService; @Configuration public class MyDubboConfig { @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("boot-user-service-provider"); return applicationConfig; } //<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry> @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setProtocol("zookeeper"); registryConfig.setAddress("127.0.0.1:2181"); return registryConfig; } //<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol> @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20882); return protocolConfig; } /** *<dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0"> <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> </dubbo:service> */ @Bean public ServiceConfig<UserService> userServiceConfig(UserService userService){ ServiceConfig<UserService> serviceConfig = new ServiceConfig<>(); serviceConfig.setInterface(UserService.class); serviceConfig.setRef(userService); serviceConfig.setVersion("1.0.0"); //配置每一个method的信息 MethodConfig methodConfig = new MethodConfig(); methodConfig.setName("getUserAddressList"); methodConfig.setTimeout(1000); //将method的设置关联到service配置中 List<MethodConfig> methods = new ArrayList<>(); methods.add(methodConfig); serviceConfig.setMethods(methods); //ProviderConfig //MonitorConfig return serviceConfig; } }
service
package com.atguigu.gmall.service.impl; import java.util.Arrays; import java.util.List; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Reference; import com.alibaba.dubbo.config.annotation.Service; import com.atguigu.gmall.bean.UserAddress; import com.atguigu.gmall.service.UserService; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; @Service//暴露服务 @Component public class UserServiceImpl implements UserService { @HystrixCommand @Override public List<UserAddress> getUserAddressList(String userId) { // TODO Auto-generated method stub System.out.println("UserServiceImpl..3....."); UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y"); UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N"); // try { // Thread.sleep(2000); // } catch (InterruptedException e) { // e.printStackTrace(); // } if(Math.random()>0.5) { throw new RuntimeException(); } return Arrays.asList(address1,address2); } }
javabean
public class UserAddress implements Serializable { private Integer id; private String userAddress; //用户地址 private String userId; //用户id private String consignee; //收货人 private String phoneNum; //电话号码 private String isDefault; //是否为默认地址 Y-是 N-否
}
原文:https://www.cnblogs.com/liuyi13535496566/p/12970076.html