此时注册中心没有显示任何注册的服务,下面我们将创建服务并服务注册进去》
首先,建立一个拥有WEB、Eureka Discovery依赖的两个基础功能的项目
创建过程同上,区别只是依赖不同:
创建好之后入下图:
然后在两个服务项目的启动类都 A_Application B2_Application 增加@EnableEurekaClient注解 开启功能
继续修改配置文件 修改内容为
注意:service-A service-B2两个微服务搭建的端口不同
建立Controller 编写测试业务逻辑(service-A service-B2 )
service-A:
package com.dk.web;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ComputeController {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@RequestMapping(value = “/add” ,method = RequestMethod.GET)
public String add(@RequestParam Integer a, @RequestParam Integer b) {
ServiceInstance instance = client.getLocalServiceInstance();
Integer r = a + b;
logger.info(“/add, host:” + instance.getHost() + “, service_id:” + instance.getServiceId() + “, result:” + r);
return “From Service-A, Result is " + r+”\nPort:"+instance.getPort();
}
//call service-B
@RequestMapping(value=“testServiceB”,method=RequestMethod.GET)
public String testServiceB(@RequestParam Integer a,@RequestParam Integer b){
RestTemplate restTemplate=new RestTemplate();
return restTemplate.getForObject(“http://localhost:7078/add?a=”+a+“&b=”+b, String.class);
}
}
service-B2
package com.dk.web;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ComputeController {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@RequestMapping(value = “/sub” ,method = RequestMethod.GET)
public String sub(@RequestParam Integer a, @RequestParam Integer b) {
ServiceInstance instance = client.getLocalServiceInstance();
Integer r = a - b;
logger.info(“/sub, host:” + instance.getHost() + “, service_id:” + instance.getServiceId() + “, result:” + r);
return “From Service-B, Result is " + r+” \nPort:"+instance.getPort();
}
//call service-A
@RequestMapping(value=“testServiceA”,method=RequestMethod.GET)
public String testServiceB(@RequestParam Integer a,@RequestParam Integer b){
RestTemplate restTemplate=new RestTemplate();
return restTemplate.getForObject(“http://localhost:2222/add?a=”+a+“&b=”+b, String.class);
}
}
启动两个微服务项目项目————————————————————————————》
访问http://localhost:7071/查看服务中心
部署微服务service-A(由于没有涉及到项目,所以简单实现参数相加)
部署微服务service-B(简单实现参数相减)
- 如果部署成功访问service-A 的 url:
http://localhost:2222/add?a=111&b=113
- 如果部署成功访问service-B2的 url:
http://localhost:7078/sub?a=111&b=113
![](https://img-blog.csdnimg.cn/20190425121316490.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvZGVyX0JveV8=,size_16,color_FFFFFF,t_70)
- 微服务B2调用微服务A的 url:
http://localhost:7078/testServiceA?a=111&b=113
由上面两个url可以看出端口号都是service-B的。
部署zuul(Zuul相当于是Web网站后端所有请求的前门,详细的实现可以看code)
创建模块同上面创建一般springboot工程一样,只是依赖不同:
创建后目录结构:
启动类上打上@EnableZuulProxy注解
修改配置文件如下所示:
编写zuul请求过滤规则:
package com.dk.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
public class AccessFilter extends ZuulFilter {
private static Logger log = LoggerFactory.getLogger(AccessFilter.class);
//四种类型:pre,routing,error,post
//pre:主要用在路由映射的阶段是寻找路由映射表的
//routing:具体的路由转发过滤器是在routing路由器,具体的请求转发的时候会调用
//error:一旦前面的过滤器出错了,会调用error过滤器。
//post:当routing,error运行完后才会调用该过滤器,是在最后阶段的
@Override
public String filterType() {
return “pre”;
}
//自定义过滤器执行的顺序,数值越大越靠后执行,越小就越先执行
@Override
public int filterOrder() {
return 0;
}
//控制过滤器生效不生效,可以在里面写一串逻辑来控制
@Override
public boolean shouldFilter() {
return false;
}
//执行过滤逻辑 (这里就输出日志了,具体看你的业务了)
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
log.info(String.format(“%s request to %s”, request.getMethod(), request.getRequestURL().toString()));
Object accessToken = request.getParameter(“accessToken”);
log.info(accessToken.toString());
// if(accessToken == null) {
// log.warn(“access token is empty”);
// ctx.setSendZuulResponse(false);
// ctx.setResponseStatusCode(401);
// return null;
// }
log.info(“access token ok”);
return null;
}
}
接着 我们启动下zuul工程,当然前面的工程都一直在运行着的,不能关闭了!!!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-PIivjnMn-1712766468695)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-SkHUSLuL-1712766468695)]