1 对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息
服务发现的意思就是:对外暴露微服务,也能够让消费者知道我们。
对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息。
打个比方,就是我们有个快递,我们想知道快递到哪了,快递员是谁?多久能到达
这个时候是不是可以有快递查询发现的接口信息提供服务。
2 修改8001工程的DeptController
dao 包下 DeptDao
package com.atguigu.springcloud.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.atguigu.springcloud.entities.Dept;
@Mapper
public interface DeptDao
{
public boolean addDept(Dept dept);
public Dept findById(Long id);
public List<Dept> findAll();
}
service包下 DeptService
import java.util.List;
import com.atguigu.springcloud.entities.Dept;
public interface DeptService
{
public boolean add(Dept dept);
public Dept get(Long id);
public List<Dept> list();
}
service包下 DeptServiceImpl
package com.atguigu.springcloud.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.atguigu.springcloud.dao.DeptDao;
import com.atguigu.springcloud.entities.Dept;
import com.atguigu.springcloud.service.DeptService;
@Service
public class DeptServiceImpl implements DeptService
{
@Autowired
private DeptDao dao;
@Override
public boolean add(Dept dept)
{
return dao.addDept(dept);
}
@Override
public Dept get(Long id)
{
return dao.findById(id);
}
@Override
public List<Dept> list()
{
return dao.findAll();
}
}
Controller
用这个来获取所有的微服务(入住人员信息)
@Autowired
private DiscoveryClient client;
完整的Controller代码:
package com.atguigu.springcloud.controller;
import java.util.List;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.atguigu.springcloud.entities.Dept;
import com.atguigu.springcloud.service.DeptService;
@RestController
public class DeptController
{
@Autowired
private DeptService service;
@Autowired
private DiscoveryClient client;
@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
public boolean add(@RequestBody Dept dept)
{
return service.add(dept);
}
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
public Dept get(@PathVariable("id") Long id)
{
return service.get(id);
}
@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
public List<Dept> list()
{
return service.list();
}
// @Autowired
// private DiscoveryClient client;
@RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
public Object discovery()
{
List<String> list = client.getServices();
System.out.println("**********" + list);
List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD-DEPT");
for (ServiceInstance element : srvList) {
System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
+ element.getUri());
}
return this.client;
}
}
主启动类
2 启动7001 8001
启动端口:
localhost:8001/dept/discovery
在Controller写的目的是为了准备的找到
控制台输出。
编写80端口
添加如下内容
因为我们最终都是要给消费者提供服务
然后启动80,7001,8001
3个端口
80:消费者
7001:eureka(服务注册中心)
8001:微服务的提供者
然后访问:
localhost/consumer/dept/discovery
客户端也能够访问到
上述做的目的就是:
我们只有自己人能够点这个超链接,但是别人是不行的。
别人也点不到这个超链接,也不知道我的微服务。
那么为了让别人对我这个有一个了解,让你知道我的server id 叫什么 是什么IP
那么8001 是可以做一个对外暴露发现的窗口和rest给你来访问,
这样就可以让你获得对我的了解。