一、概述

服务调用

1.1、nginx方式

  

1.2、注册中心

  

二、注册中心【zookeeper】

2.1、安装zookeeper3.4.11

2.2、服务提供方,需要在服务启动时吗、,把服务的信息(IP,port)注册到注册中心。

在上一节的mall-product中pom

        <dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery-server</artifactId>
<version>2.12.0</version>
</dependency>

增加配置

zookeeper.address=127.0.0.1:2181

增加注册类 ServiceRegister

@Component
public class ServiceRegister implements ApplicationRunner { @Value("${zookeeper.address}")
private String zkAddress; @Override
public void run(ApplicationArguments args) throws Exception {
CuratorFramework client = CuratorFrameworkFactory.newClient(zkAddress, new RetryOneTime(1000));
client.start();
client.blockUntilConnected(); ServiceInstance<Object> instance = ServiceInstance.builder().name("product").address("127.0.0.1").port(8080).build();//注册了地址和端口
ServiceDiscovery<Object> discovery = ServiceDiscoveryBuilder.builder(Object.class).client(client)
.basePath("/soa").build(); discovery.registerService(instance);
discovery.start();
}
}

可以再zookeeper客户端查看

ls /
ls /soa
ls /soa/product
get /soa/product/d5770a1f-640f-4b17-b5d0-bfb2fd4b0623

查看注册服务具体信息

{"name":"product","id":"d5770a1f-640f-4b17-b5d0-bfb2fd4b0623","address":"127.0.0.1","port":8080,"sslPort":null,"payload":null,"registrationTimeUTC":1523196340298,"serviceType":"DYNAMIC","uriSpec":null,"enabled":true}
cZxid = 0x10
ctime = Sun Apr 08 22:05:40 CST 2018
mZxid = 0x10
mtime = Sun Apr 08 22:05:40 CST 2018
pZxid = 0x10
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1007c571a950003
dataLength = 216
numChildren = 0

2.3、调用方

pom

        <dependency>                
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>    
<version>2.12.0</version>
</dependency>

在进行调用额时候,需要先从注册中心获取到服务地址,然后根据获取到的服务地址进行调用。

调用

    public static void main(String[] args) throws Exception {
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new RetryOneTime(1000));
client.start();
client.blockUntilConnected(); ServiceDiscovery<Object> discovery = ServiceDiscoveryBuilder.builder(Object.class).client(client)
.basePath("/soa").build(); Collection<ServiceInstance<Object>> instances = discovery.queryForInstances("product"); instances.forEach((item) -> {
System.out.println(item.getAddress());
System.out.println(item.getPort()); RestTemplate rt = new RestTemplate();
String string = rt.getForObject("http://" + item.getAddress() + ":" + item.getPort() + "/soa/product/1",
String.class);
System.out.println(string);
Response<Product> fromJson = new Gson().fromJson(string, new TypeToken<Response<Product>>() {
}.getType()); System.out.println(new Gson().toJson(fromJson));
});
}

如果有多个服务可以增加负载类即可

查看源码:https://github.com/bjlhx15/spring-boot.git

中的

  其中mall-product中的

  注册注册中心

  其中mall-webz中的

  client是测试代码,LoadBalance是负责均衡类

最新文章

  1. 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御
  2. is not in the sudoers file的解决方法
  3. React Native之坑总结(持续更新)
  4. [ASP.NET MVC 小牛之路]18 - Web API
  5. XE2:查看Extended Events收集的数据
  6. jQuery控制tabs打开的数量
  7. java 的SPI机制
  8. 杭电acm2029-Palindromes _easy version
  9. userprofile同步用户失败的原因和解决方案
  10. 精确运算--BigDecimal
  11. Altium Designer PCB制作入门实例
  12. 缓存初解(五)---SpringMVC基于注解的缓存配置--web应用实例
  13. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (六) 自动化测试结构小节
  14. 列表框List Box
  15. AsciidocFX编辑器小贴士
  16. 一个简单而实用的JQ插件——lazyload.js图片延迟加载插件
  17. Unity 2D 效应器与来回移动的实现
  18. C语言的函数指针数组(好绕啊~看完这篇估计就通关了)
  19. [Swift]LeetCode827. 最大人工岛 | Making A Large Island
  20. Django REST framework--序列化

热门文章

  1. http://www.allegro-skill.com/thread-2506-1-1.html
  2. tony_nginx的安装和配置
  3. opengl剪裁空间和视口空间中不遵从右手定则,而是遵从左手定则
  4. 459. Repeated Substring Pattern【easy】
  5. eclipse中使用jetty启动项目
  6. 第一百九十六节,jQuery EasyUI,Tooltip(提示框)组件
  7. Hibernate每个具体类一张表映射(使用XML)
  8. 自定义实现wcf的用户名密码验证
  9. SharePoint2013导入Excel到列表
  10. Week 3: Assessing performance 笔记