java怎么获取当前机器ip和容器port?
Docker启动的容器是没有带有主机IP信息的。所以,唯一的办法就是需要通过参数方式传入才可以让容器获得。从实践的角度来说,容器技术是一种隔离技术,自身并没有网络体系,需要你自己构建网络环境,所以动态的获取宿主机的IP还需要知道你的基础环境用的是什么。比如你现在用的是K8S环境,在这个上面,获得容器落在哪台主机上是很方便的。通过kubectl get po xxx -o yaml,就可以获得。
springboot打包的可执行jar 是运行在什么容器?
springboot打包的可执行jar 是运行在它内置的tomcat容器内,所以可以以jar包的形式启动,直接在互联网应用服务器运行。springboot框架将tomcat的jar包都放到了框架内部,由内部的类直接调用,所以这给程序员开发完后坐测试带来了很多的方便。
Java开发大互联网-微服务服务注册发现与如何实现容器部署?
微服务技术现在正炙手可热,因为使用微服务让系统的安全性,稳定性得以保证!
什么是微服务?区别于原来的单一系统,微服务是通过服务拆分,分布在不同的服务器上,并以一定的通信方式传递数据,实现各服务之间的解耦合的一套分布式架构!
既然分布在不同的服务器上,服务间通信的问题就是不可避免的问题,引进中间组件来维护服务是必不可缺的选择!
服务注册与发现有多种方式,比如dubbo使用zk,springcloud使用eureka等!下面就以eureka为例:
eureka分为server和client,将client放在业务服务代码中定时向eureka server注册服务,在server端统一进行维护一份服务列表,等到服务消费方调用服务的时候,先经过服务注册中心,找到相应服务实现调用!
springcloud项目中具体实现如下:
1,搭建服务注册中心服务端:加入eureka server依赖,在启动类中加入@EnableEurekaServer注解,配置文件加入端口,是否注册自己等,启动服务类,访问localhost:8080/可以看到服务列表信息!
2,代码端搭建注册中心客户端:加入eureka client 依赖,启动类中加入@EnableClientSetver注解,配置文件加入相应的注册信息,启动服务,在服务端的服务列表中查看是否注册成功!
不仅如此,注册中心的服务端还可以使用多台机器进行负载均衡,实现多个服务端之间的相互注册,防止单点宕机引起服务停止!
如何使用docker容器?
1,安装docker!
2,在springcloud项目中根目录创建dockerfile文件,指定jdk版本,启动脚本等!
3,编译镜像:docker build,注意指定路径!
4,运行镜像:docker run!
5,使用ip地址和端口验证服务部署成功!
JAVA方面的更多技术分享,敬请关注。。。
服务发现
先了解一下什么是服务发现。
传统的接口调用,都是客户端程序把服务端的地址记录下来,然后根据接口地址进行服务调用。如果在不同的测试环境上,服务地址有可能是不一样的:
测试环境:
生产环境:
那么客户端就需要小心翼翼的维护好这些配置,否则就会出现问题。而且如果服务越来越多,都是集群化部署,那么这个配置维护起来很困难。
微服务中的解决方案就是使用服务注册和服务发现。
服务端启动之后,主动的把自己的接口地址等级到一个地方,这个地方叫做服务中心,登记的时候保存<服务名称:服务地址>,这个服务地址也可以是多个。
那么客户端需要调用服务端接口的时候,就去服务中心按照服务名称查找,找到了之后就可以知道现在的服务接口地址是什么,再去进行调用。
服务端登记的过程叫做服务注册,客户端查找的过程叫做服务发现。
微服务注册发现的方案
用过Dubbo和Spring Cloud,就分别说说他们各自的解决方案。
Dubbo:注册中心可以用Zookepper/Redis/简单注册中心这几种,甚至可以基于数据库实现注册中心。如果开发能力没那么强,建议使用Zookepper。
Spring Cloud:这个就简单了,直接使用Eureka就好了,它本身就是Spring Cloud体系中的一部分。
容器
再说到容器,现在最火的就是docker了吧。
不过我们公司推docker一直没推起来,还用的是虚拟机,近今年开始有私有云。
Java语言号称一次编译,到处运行。Java虚拟机解决了跨平台的问题。只要安装了Java虚拟机,就可以执行Java代码。
那么Docker就是一次封装,到处运行。Docker解决了环境的问题。只要安装了Docker平台,就可以跑Docker包。这里说的封装是什么,就是你让一个项目跑起来所需要的所有的东西。
希望我的回答可以帮助到你!