系统级别日志,需要配合log4j才输出,在resources下添加log4j.propertie..._dubbo @method">
赞
踩
- <!--默认为true:抛异常 -->
- <dubbo:consumer check="false"/>
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Target=System.out
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
- log4j.appender.file=org.apache.log4j.FileAppender
- log4j.appender.file.File=dubbo.log
- log4j.appender.file.layout=org.apache.log4j.PatternLayout
- log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n
- log4j.rootLogger=error, stdout,file
- <!--设置超时时间为2秒,默认为1秒-->
- <dubbo:provider timeout="2000"/>
- @Service
- public class HelloServiceImpl implements HelloService {
- @Override
- public String sayHello(String name) {
- System.out.println("==========被调用了1次========");
- try {
- TimeUnit.SECONDS.sleep(3); //模拟网络延迟
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return "Hello,"+name+"!!!!";
- }
- }
dubbo推荐在Provider上尽量多配置Consumer端属性:
1、作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等
2、在Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作消费者的缺省值。
- <!-- 消费方连接第1次不算,再来重试3次,总共重试4次 -->
- <dubbo:provider timeout="2000" retries="3"/>
- @Service
- public class HelloServiceImpl implements HelloService {
- @Override
- public String sayHello(String name) {
- System.out.println("==========被调用了1次========");
- try {
- TimeUnit.SECONDS.sleep(3); //模拟网络延迟
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return "Hello,"+name+"!!!!";
- }
- }
幂等方法:适合(当参数一样,无论执行多少次,结果是一样的,例如:查询,修改)
非幂等方法:不适合(当参数一样,执行结果不一样,例如:删除,添加)
- public interface HelloService {
- String sayHello(String name);
-
- String sayNo();
- }
- @Override
- public String sayNo() {
- System.out.println("====no 被调用===");
- try {
- TimeUnit.SECONDS.sleep(3); //模拟网络延迟
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return "no";
- }
- public interface HelloService {
- String sayHello(String name);
-
- String sayNo();
- }
- @RestController
- public class HelloController {
-
- @Reference
- private HelloService helloService;
-
- @GetMapping("/hello")
- public String sayHi(String name){
- return helloService.sayHello(name);
- }
-
- @GetMapping("/no")
- public String no(){
- return helloService.sayNo();
- }
-
- }
- <dubbo:reference interface="com.lagou.service.HelloService" id="helloService">
- <dubbo:method name="sayHello" retries="3"></dubbo:method> <!--重试3次 执行四次方法-->
- <dubbo:method name="sayNo" retries="0"></dubbo:method> <!--不重试 执行一次方法-->
- </dubbo:reference>
- <dubbo:service interface="com.lagou.service.HelloService"
- class="com.lagou.service.impl.HelloServiceImpl01" version="1.0.0"/>
- <dubbo:service interface="com.lagou.service.HelloService"
- class="com.lagou.service.impl.HelloServiceImpl02" version="2.0.0"/>
- <dubbo:reference interface="com.lagou.service.HelloService" id="helloService" version="1.0.0">
- <dubbo:method name="sayHello" retries="3"></dubbo:method> <!--重试3次 执行四次方法-->
- <dubbo:method name="sayNo" retries="0"></dubbo:method> <!--不重试 执行一次方法-->
- </dubbo:reference>
- @RestController
- public class HelloController {
-
- // @Reference
- @Autowired
- private HelloService helloService;
-
- }
- v1.0 ====no 被调用===
- v1.0 ====no 被调用===
- v1.0 ====no 被调用===
- v2.0 ==========被调用了1次========
- v1.0 ==========被调用了1次========
- v2.0 ==========被调用了1次========
- package com.lagou.stub;
-
- import com.lagou.service.HelloService;
-
- /**
- * @Author panghl
- * @Date 2021/7/18 12:45
- * @Description 本地存根
- **/
- public class HelloServiceStub implements HelloService {
-
- private HelloService helloService;
-
- //本地存根必须以构造方法的形式
- public HelloServiceStub(HelloService helloService) {
- this.helloService = helloService;
- }
-
- @Override
- public String sayHello(String name) {
- if (name == null || "".equals(name)) {
- return "i am sorry";
- }
- return helloService.sayHello(name);
- }
-
- @Override
- public String sayNo() {
- return helloService.sayNo();
- }
- }
- <dubbo:reference interface="com.lagou.service.HelloService" id="helloService"
- version="*"
- stub="com.lagou.stub.HelloServiceStub">
- <dubbo:method name="sayHello" retries="3"></dubbo:method> <!--重试3次 执行四次方法-->
- <dubbo:method name="sayNo" retries="0"></dubbo:method> <!--不重试 执行一次方法-->
- </dubbo:reference>
tomcat端口8001,8002,8003
provider端口20881,20882,20883
<dubbo:provider timeout="2000" retries="3" port="20881"/>
- public String sayNo() {
- System.out.println("----服务器1---1.0被调用一次-------");
- return "no!";
- }
- <dubbo:reference loadbalance="roundrobin" interface="service.HelloService"
- id="helloService" version="2.0.0" stub="stub.HelloServiceStub">
- <dubbo:method name="sayHello" retries="3"/>
- <dubbo:method name="sayNo" retries="0"/>
- </dubbo:reference>
zookeeper注册中心宕机,还可以消费dubbo暴露的服务
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
测试:
正常发出请求
关闭zookeeper:./zkServer.sh stop
消费者仍然可以正常消费
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。