精华内容
下载资源
问答
  • Java进阶(三十一) Web服务调用

    万次阅读 2016-06-24 11:44:51
    Java进阶(三十一) Web服务调用前言 有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下: https://www.evernote.com/shard/s744/sh/c37cd503-68fc-4406-b8f2-5e90095be303/19b67e36aa2ccd19 查看代码...

    Java进阶(三十一) Web服务调用

    前言

          有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下:

          https://www.evernote.com/shard/s744/sh/c37cd503-68fc-4406-b8f2-5e90095be303/19b67e36aa2ccd19

          查看代码之后,按照以往的服务调用方法实现,结果无法实现。很是费解,求教大师兄之后,问题,迎刃而解,只能说自己需要学习的地方还有很多。

         完整代码如下:

     

    package plan.http.util;
     
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
     
    public class HttpClientUtil {
     
    public static void main(String[] args) throws Exception {
    HttpClientUtil.getByHttpPost();
    }
     
    public static String getByHttpPost() throws Exception {
     
    // 1.创建HttpClient对象。(创建默认的httpClient实例.)
    CloseableHttpClient httpclient = HttpClients.createDefault();
    // 首页
    String indexStr = "http://music-download.dev.fotoable.net/musics/lists";
    // 搜索
    String searchStr = "http://music-download.dev.fotoable.net/public/search";
    // 2.创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。(创建httppost)
    HttpPost httppost = new HttpPost(searchStr);
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    // 3.如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;
    // 对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
    // 关键词搜索传参(创建参数队列)
    formparams.add(new BasicNameValuePair("keyword", "See you again"));
    // formparams.add(new BasicNameValuePair("pwd", "123"));
    UrlEncodedFormEntity uefEntity;
    try {
    uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
    httppost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0");
    httppost.setHeader("Connection", "keep-alive");
    httppost.setHeader("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
    httppost.setHeader("Accept-Encoding", "gzip, deflate");
    httppost.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    httppost.setHeader("JSESSIONID","536020F424630F22DB1F4EAEAD8E83BD");
    httppost.setEntity(uefEntity);
    System.out.println("executing request " + httppost.getURI());
    // 4.调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
    CloseableHttpResponse response = httpclient.execute(httppost);
    try {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    System.out.println("--------------------------------------");
    System.out.println("Response content: "	+ EntityUtils.toString(entity, "UTF-8"));
    System.out.println("--------------------------------------");
    }
    } finally {
    response.close();
    }
    } catch (ClientProtocolException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    // 5. 释放连接。无论执行方法是否成功,都必须释放连接
    httpclient.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return null;
    }
    }

     

    参考文献

          http://blog.csdn.net/wangpeng047/article/details/19624529

    感触

          自己还是应该多多学习才是,遇到了问题不要紧,要懂得回过头来认真总结,学习。这样才能不断进步。

    美文美图

     

    展开全文
  • spring cloud整合dubbo组件实现服务调用,以及dubbo调用服务和springcloud的feign调用服务的区别

             之前看到很多人说Dubbo和SpringCloud怎么选,其实Spring Cloud与Dubbo的比较本身是不公平的,主要前者是一套较为完整的架构方案,而Dubbo只是其中的服务治理的解决方案。

    注:

    1. springcloud是微服务架构的一整套技术解决方案的技术栈,是这些技术栈的框架集合,包含了服务治理、注册中心、配置中心、客户端负载均衡、网关、限流熔断、分布式链路追踪、分布式事务等技术栈,而Dubbo只是处理服务治理的解决方案的框架
    2. 同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件
    3. 在Spring Cloud Alibaba的整合之下,Dubbo用户既可以享受到原本RPC带来性能优势,又可以更好的享受Spring Cloud的各种福利;而对于Spring Cloud用户来说,在服务治理层面,又对了一个不错的可选项。可以说这块的整合是真正的让这两大用户群体得到了很好的融合,起到了互相成就的作用。不用再同时顾虑Eureka和Zookeeper的配置,只需要关注和维护好Nacos一个即可

            SpringCloud里面服务治理的解决方案是:Eureke或Nacos注册中心+ Feign或Ribbon进行调用服务调用,自从spring cloud alibab框架从springcloud孵化后,dubbo也可以是SpringCloud中另一种服务治理的解决方案:即Nacos+Dubbo实现服务调用,各有优劣,要根据不同情况使用。


            为什么用dubbo?spring cloud怎么整合dubbo?在微服务中实现远程服务调用,一般是用Feign基于HTTP协议调用远程服务,也有用dubbo基于RPC协议进行远程服务调用。

    比较项 Feign(RESTful) Dubbo
    通讯协议 HTTP 默认Dubbo协议
    性能 略低 较高
    灵活度

    注:

    1. RESTful是基于HTTP协议进行交互的,HTTP协议包含大量的请求头、响应头信息。而dubbo是基于dubbo自定义的二进制协议进行传输,消息体比较简单,传输数据要小很多
    2. dubbo默认采用dubbo协议,dubbo协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低
    3. dubbo好比方言,RESTful好比普通话。方言在局部地区交流更快,普通话更容易在大部分地区交流

    微服务里面既可以使用Feign、也可以使用Dubbo进行远程调用,可根据情况使用不同的远程调用
    在这里插入图片描述

    DEMO

    一、创建生产者的api的jar

    在jar里面提供接口,生产者和消费者都引入这个jar
    在这里插入图片描述

    二、生产者

    1)引入依赖

            <!-- dubbo -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-dubbo</artifactId>
            </dependency>
    
            <!-- 引入dubbo服务提供者的api -->
            <dependency>
                <groupId>com.xinlin.springcloud.demo</groupId>
                <artifactId>products-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    

    2)配置文件修改

    server:
      port: 9002
    
    spring:
      application:
        name: products-service
      datasource:
            url: jdbc:mysql://127.0.01:3306/test?useSSL=true
            username: admin
            password: admin-123
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    dubbo:
      scan:
        base-packages: com.xinlin.demo.products.service #dubbo扫描的包目录
      protocol:
        name: dubbo   #dubbo协议
        port: 20880   #端口
      registry:
        address: nacos://localhost:8848 #dubbo注册中心的地址
        # spring-cloud://localhost #用spring cloud的注册中心
    

    注:
    dubbo.protocol.name 默认使用dubbo协议,也可以使用其他协议,例如http协议
    dubbo.protocol.port = -1 表示从20880开始,如果被占用则端口号加1

    3)服务端创建dubbo服务

    package com.xinlin.demo.products.service.impl;
    
    import com.xinlin.demo.products.service.DubboService;
    import org.apache.dubbo.config.annotation.Service;
    
    
    @Service
    public class DubboServiceImpl implements DubboService {
    
        @Override
        public String findUserInfo(Integer id) {
            String info = String.format("dubbo服务查询的用户信息:用户id=[%s]",id);
            return info;
        }
    }
    

    注:这里的@Service是Dubbo的注解,表示dubbo服务

    三、消费者

    1)消费者端引入依赖,同生产者的pom一样
    2)配置文件修改

    dubbo:
      application:
        name: comsumer-service
      scan:
        base-packages: com.xinlin.demo.comsumer
      registry:
        address: nacos://127.0.0.1:8848
    

    注:可以和生产者一样,只要端口号不一样即可,但是消费者没有提供服务的话,可以不指定dubbo协议和端口

    3)消费者注入dubbo

        @Autowired
        private PorductService porductService;
    
        //Reference为dubbo的注解
        @Reference(timeout = 18000,check = false)
        private DubboService dubboService;
    
        @RequestMapping(value = "/findUser/{id}")
        public String findUser(@PathVariable("id") Integer id){
            //调用dubbo服务,获取用户信息
            String info = dubboService.findUserInfo(id);
            return info;
        }
    

    四、测试验证

    1)先启动nacos的注册中心,再分别启动生产者、消费者的服务
    2)可以看到消费者成功调用了生产者的dubbo服务
    在这里插入图片描述

    注:nacos的注册中心的启动参考这篇:spring cloud 使用nacos作为注册中心

    五、启动异常问题

          引入spring-cloud-starter-dubbo后启动项目失败:java.lang.IllegalStateException: No application config found or it’s not a valid config! Please add <dubbo:application name="…" /> to your spring config,检查源码是说dubbo.application.name这个配置没有,但是我配置了也是提示这个异常,再检查发现是jar版本问题

    我这个问题的解决方案:
    spring-cloud-alibaba-dependencies由2.1.0.RELEASE修改为2.1.1.RELEASE即可解决
    具体原因:引入spring-cloud-starter-dubbo后启动项目失败

    展开全文
  • Dubbo 服务调用流程

    千次阅读 2020-02-22 18:22:20
    服务调用流程 通过debug发现,在消费者调用服务时,真正调用方法的是一个代理对象,调用的 InvokerInvocationHandler invoke 方法。 在 invoke方法内,调用 this.invoker.invoke ----> MockClusterInvoker invoke...

    服务调用流程

    通过debug发现,在消费者调用服务时,真正调用方法的是一个代理对象,调用的 InvokerInvocationHandler invoke 方法。
    在 invoke方法内,调用
    this.invoker.invoke ----> MockClusterInvoker invoke
    在MockClusterInvoker invoke 中调用了
    result = this.invoker.invoke(invocation); 主要是集群容错
    然后调用了:
    AbstractClusterInvoker invoke ----> List<Invoker> invokers = this.list(invocation); 获取到执行器,因为有多版本,所以是个list
    然后在下面的代码里:

    RpcUtils.attachInvocationIdIfAsync(this.getUrl(), invocation);
    

    负载均衡机制
    return this.doInvoke(invocation, invokers, loadbalance);执行了doInvoke
    FailoverClusterInvoker doInvoke ----> Invoker invoker = this.select(loadbalance, invocation, copyinvokers, invoked); 根据权重,选择一个执行器执行 —>invoker.invoke(invocation) 过滤器工作,缓存,计数等
    最后进入 DubboInvoker doInvoke
    拿到要调用哪个方法,找个客户端连接,发送请求,进行通信,返回结果,期间如果超时了,就选择另外的执行器调用
    在这里插入图片描述

    学习年限不足,知识过浅,说的不对请见谅。

    世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

    展开全文
  • Dubbo服务调用超时

    千次阅读 2019-08-02 23:09:14
    默认服务调用超时时限为1秒。可以在消费者端与提供者端设置超时时限。 一、创建提供者工程06-provider-timeout (1) 创建工程 复制02-provider-zk工程,并重命名为06-provider-timeout (2) 修改依赖 这里...

    服务降级的发生,其实是由于消费者调用服务超时引起的,即从发出调用请求到获取到提供者的响应结果这个时间超出了设定的时限。默认服务调用超时时限为1秒。可以在消费者端与提供者端设置超时时限。

    一、创建提供者工程06-provider-timeout

    (1) 创建工程

    复制02-provider-zk工程,并重命名为06-provider-timeout

    (2) 修改依赖

    这里不再需要00-api工程了,所以在pom文件中将对00-api工程的依赖删除即可

    (3) 定义接口

    (4) 定义接口实现类

    在com.dubbo.provider包中定义接口的实现类。该实现类中的业务方法添加一个2秒的Sleep,以延长向消费者返回结果的时间

    (5) 修改配置文件

    二、创建消费者工程06-consumer-timeout

    (1) 创建工程

    复制06-consumer-downgrade2工程,并重命名为06-consumer-timeout

    (2) 添加日志文件

    在src/main/resources下添加log4j.properties文件

    (3) 定义接口

    (4) 实现接口

    (5) 修改配置文件

    (6) 客户端调用类

    (7) 效果

    展开全文
  • 五、负载均衡服务调用Ribbon

    万次阅读 2020-04-16 13:31:18
    负载均衡服务调用框架Ribbon的使用
  • 分布式服务框架的服务调用

    千次阅读 2017-03-31 05:42:24
    对于分布式服务框架服务调用的一些考虑~~~
  • 跨域的Dubbo服务调用实践

    千次阅读 2018-09-04 10:25:23
    首先熟悉一下Dubbo的工作原理,四个核心组件,组件图如下: Provider:暴露服务方称之为“服务提供者”。 Consumer:调用远程服务方称之为“服务...然后,思考Dubbo如何实现跨域工作(就是全球化服务调用)? 使...
  • 深入浅出 gRPC 04:gRPC 服务调用原理

    千次阅读 2020-02-03 19:34:59
    1. 常用的服务调用方式 1.1 同步服务调用 1.2 并行服务调用 1.3 异步服务调用 2. 服务调用的一些误区和典型问题 2.1 理解误区 2.1.1 I/O 异步服务就是异步 2.1.2 服务调用天生就是同步的 2.1.3 异步服务调用...
  • Dubbo服务调用原理

    千次阅读 2018-09-11 21:40:30
    服务调用原理 参考文档 http://dubbo.apache.org/zh-cn/docs/dev/design.html 引用服务 最终,创建一个代理对象 InvokerInvocationHandler Invoke,是一层一层封装的结果 invoker.invoke 执行 ...
  • Dubbo 服务调用原理浅析

    千次阅读 2017-09-12 19:16:22
    dubbo概念dubbo原理dubbo应用场景 Dubbo概念: Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是...
  • 使用Spring Cloud Feign进行服务调用

    万次阅读 2018-10-30 14:44:45
    在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, ...
  • Spring Cloud体系里应用比较广泛的服务调用方式有两种: 使用RestTemplate进行服务调用,使用Ribbon做负载均衡 使用Feign将服务声明,声明之后的服务可以像调用本地方法一样调用,Feign集成了Ribbon作为负载均衡 ...
  • dubbo服务调用超时问题

    千次阅读 2019-01-30 11:27:07
    dubbo在调用服务不成功时,默认是会重试两次的。...如下 1.对于核心的服务中心,去除dubbo超时重试机制,并重新评估设置...2.业务处理代码必须放在服务端,客户端只做参数验证和服务调用,不涉及业务流程处理 全局配...
  • Dubbo-服务调用路由规则

    千次阅读 2019-01-20 11:26:38
    dubbo-服务调用路由规则 路由规则决定一次 dubbo 服务调用的目标服务器,分为条件路由规则和脚本路由规则,并且支持可扩展 。 写入路由规则 向注册中心写入路由规则的操作通常由监控中心或治理中心的页面完成 ...
  • dubbo源码浅析-远程服务调用流程

    千次阅读 2018-05-29 17:22:49
    转载自:dubbo源码浅析(五)-远程服务调用流程非商业转载,如造成侵权,请联系本人删除消费端调用远程服务接口时,使用上和调用普通的java接口是没有任何区别,但是服务消费者和提供者是跨JVM和主机的,客户端如何...
  • 【SpringCould学习一】SpringCould的简介和SpringCould的服务注册及服务调用一、SpringCould的简介二、SpringCould的服务注册及服务调用 一、SpringCould的简介 1、什么是SpringCloud Spring Cloud是一系列框架的...
  • feign服务调用添加Header参数

    千次阅读 2019-12-23 21:53:51
    feign服务调用添加Header参数 @Configuration public class FeignConfiguration implements RequestInterceptor { private static final Logger logger = LoggerFactory.getLogger(FeignConfiguration.class); ...
  • Ejb远程调用-jboss服务器调用服务器-Bean调用Bean

    千次阅读 热门讨论 2015-02-16 11:41:25
    1:现有已经开发好的线,如果是增删改是调用其他系统的,而现在是在Controller调用的,是不受EJB分布式事务(JTA)控制的,会出现数据的不准确性,所以为了提高数据的正确性,大家需要把此种方法的调用在自己的Bean...
  • 关于Eureka服务调用服务不通问题的查找1 .spring eureka相关的知识点请看该文章2.本人所遇到的问题是关于eureka消费方调用服务端时服务抛出异常 > ...
  • Dubbo服务调用过程

    万次阅读 2019-01-05 22:30:47
    之前介绍了Dubbo的整体架构,现在我们来说一下Dubbo的调用过程。 直奔主题,先看一下官方的说明 ... Monitor: 统计服务调用次调和调用时间的监控中心。 Container: 服务运行容器。 调用关系说明: 0. 服...
  • 本系列文章使用SpringCloud Alibaba一步一步构建你的微服务架构体系,这是第三篇“服务调用”,欢迎大家持续关注!
  • 如何跨服务调用后端接口
  • 分布式应用服务调用的方式

    千次阅读 2018-06-25 01:02:01
    服务调用途径分布式架构应用中,不同项目的服务/接口互相调用/通讯. 方案有两种 : http协议和socket: 1. http: 相当于直接写一个Controller.提供一个外部的映射接口,需要访问时,直接访问这个接口即可. 2. socket: ...
  • 一个服务调用另一个服务的步骤

    千次阅读 2018-06-30 08:45:10
    在开发过程中经常会报一个项目拆分出来几个服务,拆分出来的服务不仅本项目可以使用,其它项目也可以使用,当然也会有某个服务调用另一个服务的Api的情况,遇到这种情况,分以下两个步骤:1.在pom.xml文件中添加要...
  • Nacos跨服务器调用服务报错

    千次阅读 2020-02-26 12:30:31
    利用gateway做springcloud微服务网关路由服务时出现报错情况,发现是和网关不在一个服务器的服务无法使用 Nacos服务注册的IP Nacos注册中心是: https://github.com/alibaba/nacos 各个服务通过Nacos客户端将服务...
  • 最近使用了Seata作为分布式事务管理工具,在一般情况如: A服务调用B服务且A服务调用C服务,即A-B & A-C这种服务调用链路,当其中任意一个服务报错,事务是可以回滚的。 然而,稍微复杂一点的情况我发现seata...
  • 远程服务调用 Dubbo分布式框架

    千次阅读 2016-08-04 21:44:40
    Dubbo一、Dubbo介绍Dubbo 是一个分布式服务框架,用于提高性能和透明化的RPC远程服务调用。 为什么要用Dubbo 最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间的解耦合,或者最大限度的分耦合。 ...
  • dubbo服务调用超时问题解决方案

    万次阅读 2018-05-16 14:07:19
    dubbo在调用服务不成功时,默认是会重试两次的。...如下1.对于核心的服务中心,去除dubbo超时重试机制,并重新...2.业务处理代码必须放在服务端,客户端只做参数验证和服务调用,不涉及业务流程处理全局配置实例&lt...
  • 苏宁的RPC远程服务调用框架RSF

    千次阅读 多人点赞 2018-09-28 10:17:30
    苏宁的RPC远程服务调用框架RSF    苏宁的系统间交互最初使用中心化 ESB 架构,但随着系统拆分工作的展开及业务量的迅速攀升,系统间调用规模越来越大,ESB 中心化架构带来的诸如中心资源隔离、中心容量动态评估...
  • dubbo(5) Dubbo源码解析之服务调用过程

    万次阅读 2019-05-04 12:29:23
    Dubbo源码解析之服务调用过程 简介 在前面的文章中,我们分析了 Dubbo SPI、服务导出与引入、以及集群容错方面的代码。经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了。Dubbo 服务调用过程比较复杂,包含...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,916
精华内容 59,566
关键字:

服务调用