精华内容
下载资源
问答
  • 互相服务还是相互服务
    千次阅读
    2021-03-25 00:20:09

    一、@FeignClient

    有2种调用方法

    1.服务提供方已经注册到注册中心
    直接使用@FeignClient("服务提供方在注册中心注册服务的名字")
    不多说直接上码
    
    @FeignClient("INTER-SERVICE")
    @Service
    public interface TestClient2 {
    
        @PostMapping("task-controller/contractSw")
        @ResponseBody
        Result getcontractSw();
    }
    
    Service调用,Impl实现。
    
    public interface TestService {
    	Result getcontractSw();
    }
    
    @Override
    public Result getcontractSw() {
    	return testClient2.getcontractSw();
    }
    
    主要为了学习使用方法,所以这边我选了服务方提供的一个无参方法,然后Controller中调用实现类方法。
    
    @ResponseBody
    @PostMapping("/testC")
    public Result getcontractSw(){
    	return testService.getcontractSw();
    }
    
    2.服务提供未在注册中心注册
    那就使用@FeignClient("${httpurl}")
    还是不多说直接上代码
    
    @FeignClient(url = "${jcos.url}", name = "jcosService")
    @Service
    public interface TestClient {
    
        @PostMapping("rg/cancelTimeOutArea")
        @ResponseBody
        Result getcancelTimeOutArea();
    }
    
    我调用的都是无参方法,所以Service和Impl的实现方法都一样,太晚了,有点困,不想写了。
    然后Controller中调用
    
    @ResponseBody
    @PostMapping("/testCancel")
    public Result getcancelTimeOutArea(){
    	return testService.getcancelTimeOutArea();
    }
    
    最后,主函数记得加@EnableFeignClients
    
    @SpringBootApplication(scanBasePackages = {""})
    @MapperScan(basePackages = "")
    @EnableCaching
    @EnableRetry
    @EnableScheduling
    @EnableAsync
    @EnableFeignClients
    
    public class BusinessApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BusinessApplication.class, args);
        }
    
    }
    	
    

    二、使用RestTemplate

    这个没有用到FeignClient,所以直接Service先定义接口,然后Impl中实现。
    也不多说,直接上码。
    
    public interface TestService {
    	ResultDto getcancelTimeOutArea1();
    }
    
    	@Value("${jcos.url}")
        private String jcosurl;
    
    	@Override
        public ResultDto getcancelTimeOutArea1(){
            String url = "rg/cancelTimeOutArea";
            url = jcosurl + url;
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<Object> requestEntity = new HttpEntity<>(headers);
            RestTemplate restTemplate = new RestTemplate();
    
            return restTemplate.postForObject(url, requestEntity, ResultDto.class);
        }
    

    最后测试方法,用postman测试,安装包位置可以看这篇结尾
    链接:https://blog.csdn.net/weixin_43099980/article/details/115190687

    完结,撒花!可以睡觉了!!!

    更多相关内容
  • nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用nacos服务注册流程调用
  • 在分布式系统中基本没有绝对的服务...那么对于大多数的分布式系统而言还是存在这种服务的提供者和消费者角色互换的情况。下面就来以上一篇的案例来大概实现一下服务消费者和提供者的角色互换问题。 说明一下以下...

    在分布式系统中基本没有绝对的服务提供者也没有绝对的服务消费者,即便有那也是极少极少的情况。什么时候会出现这种情况呢?比如说一个分布式系统中有一个日志处理的子系统,那么好了这个子系统基本上就是一个服务的提供者,它基本不会去调用其他的系统。那么对于大多数的分布式系统而言还是存在这种服务的提供者和消费者角色互换的情况。下面就来以上一篇的案例来大概实现一下服务消费者和提供者的角色互换问题。

    说明一下以下的谈的这个例子,都是以我上一篇博客写的为基础,如果君有兴趣可以看我的上一篇博客地址为:https://blog.csdn.net/CDW2328/article/details/94590383

    既然这里要实现服务的消费者变成服务的提供者,那么我这里首先要开始着手操作服务的消费者。好了接下来就是具体的实现的方法:

    1:在原来的maven项目的基础上,先创建一个对外提供的接口,然后在服务的消费者里面创建对象实现这个接口。

    1.1:创建一个对外提供服务的接口:

    package com.alibaba.model;

    /**
     * 
     *@description: 商品管理的模块
     *@author chendawei
     */
    public interface CommodityManagerModel {

        /**
         * 更新用户的商品
         * @param userMassage 用户信息
         * @return
         */
        public String updateCommodityUser(String userMassage);
    }
    1.2:实现这个接口:

    package com.alibaba.model.Impl;

    import com.alibaba.model.CommodityManagerModel;

    /**
     * 
     *@description:  商品管理的模块
     *@author chendawei
     */
    public class CommodityManagerModelImpl implements CommodityManagerModel{

        public String updateCommodityUser(String userMassage) {
            return userMassage;
        }

    }
    2、到此对外提供服务的接口和这个接口的实现类我就写好了,那么接下来我们要创建一个application.xml用于配置向服务注册中心zookeeper提交的信息。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://code.alibabatech.com/schema/dubbo 
           http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

            <!-- 服务提供方某一个功能的具体实现,这个功能供消费者调用 -->
              <bean id="CommodityManagerModel" class="com.alibaba.model.Impl.CommodityManagerModelImpl"></bean>
              
              <!-- 服务提供者的信息,以便计算依赖关系 -->
              <dubbo:application name="DubboServerConsumerToProvider"></dubbo:application>
              
              <!-- 将服务提供者的地址暴露出去。这个过程通过zookeeper实现服务注册中心,进行注册暴露 -->
              <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
              
              <!-- 将服务提供者的端口号暴露出去 -->
              <dubbo:protocol name="dubbo" port="20002"></dubbo:protocol>
              
              <!-- 将服务提供者需要对外提供的功能暴露出去 -->
              <dubbo:service interface="com.alibaba.model.CommodityManagerModel" ref="CommodityManagerModel"></dubbo:service>
    </beans>

    最后一步就是创建一个启动的对象:

    package com.alibaba.run;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class RunServerProvider {

        public static void main(String[] args) {
            try {
                //加载主配置文件
                ClassPathXmlApplicationContext ac = new  ClassPathXmlApplicationContext("application.xml");
                //一直让启动的第一种方式
                /*
                 * while(true) { ac.start(); System.out.println("注册成功"); }
                 */
                //一直让启动的第二种方式,推荐
                ac.start();
                System.in.read();
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    好了到此我们服务的消费者就具有了服务提供者的角色。接下来开始在服务提供者里面创建一个服务的消费者。

    1:创建一个包然后在这个包里面创建一个接口。注意:此时创建的这个包的命名必须和这个接口的命名一定要和上面服务的提供者向外暴露的接口所在的包名和接口名称一致。下面是在服务的提供者里面创建一个和上面服务的提供者相同包名和接口名的示例:

    package com.alibaba.model;

    public interface CommodityManagerModel {

        /**
           *    更新用户的商品
         * @param userMassage 用户信息
         * @return
         */
        public String updateCommodityUser(String userMassage);
    }

    2:再创建一个application.xml用户向Dubbo的注册中心注册并生成调用服务的代理对象。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://code.alibabatech.com/schema/dubbo 
           http://code.alibabatech.com/schema/dubbo/dubbo.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx.xsd">

        <!-- 服务消费者的应用程序的名称,用于计算依赖关系 -->
        <dubbo:application name="DubboServerProviderToConsumer"/>
        
        <!-- 服务消费者同时也向注册中心进行注册 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
        
        <!-- 生成服务代理 -->
        <dubbo:reference id="CommodityManagerModel" interface="com.alibaba.model.CommodityManagerModel"/>
    </beans>

    最后一步就是创建一个消费者的启动的对象:

    package com.alibaba.run;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import com.alibaba.model.CommodityManagerModel;
    import com.alibaba.moudel.UserManagerModel;

    /**
     *  运行服务的消费者
     *@description:
     *@author chendawei
     */
    public class RunServerConsumer {

        public static void main(String[] args) {
            try {
                ClassPathXmlApplicationContext cs =  new ClassPathXmlApplicationContext("application.xml");
                cs.start();
                System.out.println("开始调用服务的消费者");
                CommodityManagerModel um = (CommodityManagerModel)cs.getBean("CommodityManagerModel");
                String userMassage = um.updateCommodityUser("你好");
                System.out.println(userMassage);
                System.in.read();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    }
    然后分别启动服务提供者中的服务提供测试对象和服务消费测试对象,服务消费者里面也是一样启动服务提供测试对象和服务消费测试对象。然后就可以去Dubbo的可视化界面中进行查看了。

    提供者这里面已经有两个提供者,一个是本来的服务提供者另外一个是服务消费者启动一个服务的提供者

     

    消费者这里面已经有两个消费者,一个是本来的服务消费者另外一个是服务提供者者启动一个服务的消费者

    好了,这里面我们看到无论是服务的提供者还是服务的消费者都绑定到了169.254.120.125这个IP上,这个IP是我的以太网适配器 VMware Network Adapter VMnet8上IV4的IP地址。为啥会绑定到VMnet8的这个网卡上呢?下次再说

     

    展开全文
  • 客户端和服务器之间互相ping

    千次阅读 2020-04-28 10:49:13
    想使用JMeterPlugins 监控远程linux的系统资源,如Memory,CPU等,本地插件已经配置完成, 远程linux也已成功安装startAgent,并也成功启动,客户端和服务器之间也可以相互ping通。 互通了: 接下来的问题是要...

    注:

    想使用JMeterPlugins 监控远程linux的系统资源,如Memory,CPU等,本地插件已经配置完成, 远程linux也已成功安装startAgent,并也成功启动,客户端和服务器之间也可以相互ping通。

    互通了:

    接下来的问题是要ping通IP和指定端口号,要用到tcping。

    展开全文
  • consul服务节点 微服务 dc1 10.168.2.160 server1 demo8004-feedback-service dc2 10.168.2.136 server2 demo8005-easycode-service 下文中以dc2为例 1、dc1配置文件 server1.json { "datacenter": "dc1", ...

    0、提前说明

    数据中心IPconsul服务节点微服务
    dc110.168.2.160server1demo8004-feedback-service
    dc210.168.2.136server2demo8005-easycode-service

    下文中以dc2为例

    1、dc1配置文件

    server1.json
    {
      "datacenter": "dc1",
      "data_dir": "./data1",
      "log_level": "INFO",
      "server": true,
      "node_name": "server1",
      "ui": true,
      "client_addr": "0.0.0.0",
      "advertise_addr": "10.168.2.136",
      "bootstrap_expect": 1
    }
    

    2、dc1启动文件

    runConsul - 1.bat
    call consul agent -config-file=.\server1.json
    

    3、dc2配置文件

    server2.json
    {
      "datacenter": "dc2",
      "data_dir": "./data2",
      "log_level": "INFO",
      "server": true,
      "node_name": "server2",
      "ui": true,
      "client_addr": "0.0.0.0",
      "advertise_addr": "10.168.2.160",
      "bootstrap_expect": 1
    }
    

    4、dc2启动文件

    runConsul - 2.bat
    call consul agent -config-file=.\server2.json
    

    5、将配置文件和启动文件放在各自服务器consul.exe所在文件夹下,如图

    在这里插入图片描述

    6、双击runConsul - 1.bat文件启动consul

    7、待本地和另一个服务器上的两个consul启动完成后,输入下面的命令,连接dc1和dc2

    consul join -wan 10.168.2.160
    

    在这里插入图片描述

    8、输入以下命令检查连接是否成功,如果同时出现dc1和dc2则成功

    consul members -wan
    

    在这里插入图片描述

    9、在浏览器输入网址localhost:8500,点击dc1,会同时出现dc2的标签

    在这里插入图片描述

    10、在Java项目中添加consul数据中心配置

    调用方向为:demo8005-service -> demo8004-api -> demo8004-service

    数据中心IPconsul服务节点微服务
    dc110.168.2.160server1demo8004-feedback-service
    dc210.168.2.136server2demo8005-easycode-service

    在服务调用方和被调用方,分别添加微服务所在数据中心

    spring.cloud.consul.discovery.datacenters.demo8004-feedback-service=dc1
    spring.cloud.consul.discovery.datacenters.demo8005-easycode-service=dc2
    

    在这里插入图片描述

    11、启动微服务,使用postman进行测试,OK

    在这里插入图片描述
    至此,dc1和dc2的服务可以互相调用。

    完结撒花~~~

    展开全文
  • Dubbo框架下,服务间如何相互调用

    万次阅读 2018-08-14 00:27:17
    那么不同主机不同服务间是如何调用的? 解决思想:如果是All in one 结构的项目,我们要引用其他类,直接引用即可。但是如果不在同一个项目中如何引用咧。如果调用的类在本项目中没有,则会报语法错误。 有以下两...
  • 容器外部访问容器内部服务 1.使用hostNetwork参数 容器内部服务与宿主机同一网段 特点:当Pod调度到哪个节点就使用哪个节点的IP地址,客户端使用IP地址访问容器里面的服务。一个node只能启动一个pod端口,端口不能...
  • 上一篇讲解了客户端给服务器发送消息,这一篇讲解客户端和服务器相互发送消息,客户端发送消息给服务器,服务器收到客户端的请求然后返回信息给客户端。 1.服务器代码: ** * @author: njb * @Date: 2020/11/28...
  • 配置了ingress后 外网可以访问 配置的域名来 访问到服务api 但是k8s集群内pod用 外网地址去访问时 走的是外网的流量。 k8s的pod之间相互访问,最好使用servicename的方式去访问。 servicename.namespace:port/api ...
  • 管理服务之间的依赖关系

    千次阅读 2019-08-16 15:29:14
    在微服务架构中存在众多服务服务之间需要管理相互之间的依赖关系。 1. 构建无环依赖架构 依赖关系有三种基本的表现形式,其中类似Service1依赖于Service2这种直接依赖最容易识别和管理(见下图a);间接依赖即...
  • 为了减轻服务器压力,决定把一部分服务移到另一台服务器上,之前的注册配置是这样的: eureka.client.serviceUrl.defaultZone=http://172.31.111.xxx:10501/eureka/,http://172.31.111.xxx:10502/eureka/,...
  • {pod-name}.{service-name}.{namespace}.svc.cluster.local 可以进入到pod中查看/etc/hosts Service: {service-name}.{namespace}.svc.cluster.local 服务例子: redis-service.redis.svc.cluster.local //redis-...
  • 3、通信协议 1)通信协议概念 建立通信还需要通信协议,就比如中国统一的语言汉语,这样沟通起来就轻而易举了 通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同...
  • 从购买服务器到网站搭建成功保姆级教程~超详细

    万次阅读 多人点赞 2022-05-23 13:48:30
    简单理解,内网 IP 提供局域网(LAN)服务,云服务器之间互相访问。公网 IP 在用户在云服务器实例上需要访问 Internet 服务时使用。 以上就是在选择服务器时一些比较值得注意的参数配置,小伙伴们看到这里,就可以去...
  • 这时我们就需要让这两个docker-compose启动的服务共享网络,这样就可以相互调用服务了 数据库的docker-compose文件 我们可以使用 docker network create my_net 创建一个网络,之后每个docker-compose.yml引用即可 ...
  • 接着上一篇博客,客户端的创建我们知道了服务的注册与发现,那么,服务之间是怎么进行互相调用的呢? 我们先看一下服务列表,然后通过实例,来看一下怎么进行服务之间的调用,再稍微看一下源码,看看调用是怎么实现...
  • SpringCloud底层服务之间是怎么相互调用的?

    万次阅读 多人点赞 2018-11-22 16:41:10
    这个时候如果别人请求订单服务,订单服务还是可以正常调用库存服务扣减库存,调用仓储服务通知发货。只不过调用积分服务的时候,每次都会报错。 但是如果积分服务都挂了,每次调用都要去卡住几秒钟干啥呢?有意义...
  • Dubbo服务调用过程

    万次阅读 2019-01-05 22:30:47
    Provider: 暴露服务服务提供方。 Consumer: 调用远程服务服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。 调用关系说明...
  • 在传统的服务架构中,服务的规模处于运维人员的可控范围内。当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定。在微服务应用中,服务实例的数量和网络地址都是动态变化的,这对系统运维提出了巨大...
  • 节点间通信(包括老项目)通过eureka(非boot web项目的注eureka注册与发现参照前文)提供http通信,由于我们公司内部项目间交流要求通过dubbo做服务的暴露与消费,考虑新加一个boot节点用于http与dubbo之间的相互转换
  • java两个线程互相守护

    2019-04-23 01:49:05
    NULL 博文链接:https://ontheway-lyl.iteye.com/blog/2259898
  • SpringCloud 服务之间调用

    千次阅读 2018-11-21 21:58:10
    Spring cloud 中服务之间通过...客户端ribbon的负载均衡,解决的是服务发起方(在Eureka注册的服务)对被调用的服务的负载,比如我们查询商品服务要调用显示库存和商品明细服务,通过商品服务的接口将两个服务...
  • 基于springcloud的2个sprigboot项目分别部署在2台服务器上,然后用restTemplate在这2个sprigboot项目互相调用,结果调用不通!可是根据springcloud的架构,只要springboot应用注册在eureka上,就可以互相调用,而且...
  • (6.1)Kubernetes的Sevice服务间调用

    千次阅读 2020-03-05 22:06:35
    虽然Service解决了Pod的服务发现和负载均衡问题,但存在着类似的问题:不提前知道Service的IP,还是需要改程序或配置啊。看到这里有没有感觉身体被掏空? 2、场景2 环境变量(老方法) 我们知道通过 ...
  • dubbo两个提供者互相调用的问题

    千次阅读 2020-12-18 23:45:52
    现在有两个提供者服务器 S1,S2S1里面有个接口AService,实现类AServiceImplS2里面有个接口BService,实现类BServiceImpl现在AServiceImpl里面要调用BServiceImpl,代码如下S1:@Service("aService")public class ...
  • Android AIDL实现与服务相互调用

    千次阅读 2018-05-30 09:28:35
    问题4 实现与服务之间互相调用 1.在绑定服务时会返回一个实现了AIDL的对象,这样可以通过对象调用服务中对应实现, 2.可以在应用层实现一个AIDL接口的对象,通过绑定服务返回的AIDL对象回传给服务,这样可以在服务中...
  • eureka实现服务之间的调用

    千次阅读 2019-12-18 14:16:41
    1.搭建订单服务工程 在父工程microservice-springcloud中,创建Maven子模块microservice-eureka-order。 <1>在pom.xml中,添加spring-cloud-starter-eureka依赖 <2>编写配置文件 <3>创建订单...
  • Docker各个容器服务之间的访问

    千次阅读 2020-06-21 22:17:43
    docker容器部署方式下像mysql,mq,redis这些都是要跨容器互相访问的,那么就涉及到了容器...但是这种方式并不完美,并不是每个服务都需要对外暴露端口 2.容器与容器之间进行关联,关联后就可以进行互相访问; ...
  • 系统会为每个用户默认创建一个默认安全组,默认安全组的规则是在出方向上的数据 报文全部放行,入方向访问受限,安全组内的云服务器无需添加规则即可互相访问。 默认安全组可以直接使用,也可以根据需要创建自定义...
  • 这个时候如果别人请求订单服务,订单服务还是可以正常调用库存服务扣减库存,调用仓储服务通知发货。只不过调用积分服务的时候,每次都会报错。但是如果积分服务都挂了,每次调用都要去卡住几秒钟干啥呢?有意义吗?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,026
精华内容 36,410
热门标签
关键字:

互相服务还是相互服务

友情链接: FeatureExtract.zip