springcloud 微服务(二) 集成Feign组件 跨服务调用实例

今天我们要搭建正式跨服务调用的实例并集成feign,有设计到下面三个服务:

  1. eureka-server: 注册中心。
  2. user: 提供者微服务。
  3. item: 消费者微服务。

一.base父工程搭建(统一包版本管理)

1.新建hadluo-base pom类型maven工程
2.maven配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.hadluo</groupId>
	<artifactId>hadluo-base</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>


	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>
</project>

feign依赖:

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

二.user提供者微服务搭建

1.新建user聚合maven工程,然后在聚合工程下面建一个user-api和user-service子工程。结果 如下:

在这里插入图片描述
2.user聚合父工程maven:

<modules>
		<module>user-api</module>
		<module>user-service</module>
	</modules>
	<parent>
		<groupId>com.hadluo</groupId>
		<artifactId>hadluo-base</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

聚合了api,service, parent为我们的base工程。
3.user-service的maven如下:

<dependencies>
		<dependency>
			<artifactId>user-api</artifactId>
			<groupId>com.hadluo</groupId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>

就依赖了user-api
4.建立提供者接口,在user-api内建接口:

//声明feign提供出去的接口  user为服务实例名
@FeignClient(value = "user")
public interface UserService {
    @RequestMapping(value = "/{uid}", method = RequestMethod.GET)
    String get(@PathVariable("uid") Long uid);
}

5.user-service实现:

@RestController
public class UserServiceImpl implements UserService {
    @Override
    public String get(Long uid) {
        System.err.println("user 微服务提供者>>get:" + uid);
        return "user服务返回:HadLuo$" + uid;
    }
}

6.main入口:

@EnableEurekaClient // 启用EurekaClient与EurekaServer通信,用来获取注册中心维护的实例信息
@SpringBootApplication
@EnableFeignClients(basePackages = { "com.hadluo" }) // 启用feign扫描提供出去的接口
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}

7.yml配置:

server:
  port: 8881
spring:
  application:
    #给微服务设置一个名字
    name: user
eureka:
  client:
    #允许作为客户端
    fetch-registry: true
    service-url:
      # eureka 注册中心的地址
      defaultZone: http://localhost:8091/eureka/

三.item消费者微服务搭建

1.新建item聚合maven工程,然后在聚合工程下面建一个item-api和item-service子工程。
2.item controller类,用于客户端调用,我们在调用user服务。

@RestController
public class ItemServiceController {
    // 直接注入远程的微服务的接口
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/{itemId}/{userId}", method = RequestMethod.GET)
    String select(@PathVariable("itemId") Long itemId, @PathVariable("userId") Long userId) {
        // 先 调用户微服务,查询用户信息
        String ret = userService.get(userId);
        System.err.println("user服务返回>>" + ret);
        // 查询商品
        System.err.println("item服务返回:华为Pro$" + itemId);
        return "item服务返回:华为Pro$" + itemId;
    }
}

3.main入口:

@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = "com.hadluo")
public class ItemApplication {
    public static void main(String[] args) {
        SpringApplication.run(ItemApplication.class, args);
    }
}

4.yml配置:

server:
  port: 8880
spring:
  application:
    #给微服务设置一个名字
    name: item
eureka:
  client:
    #表示客户端是否从 Eureka Server 获取实例注册信息。
    fetch-registry: true
    #表示此实例是否注册到 Eureka Server 以供其他实例发现。在某些情况下,如果你不想自己的实例被发现,而只想发现其他实例,配置为 false 即可。
    register-with-eureka: true
    service-url:
      # eureka 注册中心的地址
      defaultZone: http://localhost:8091/eureka/

四.eureka-server注册中心就跟我们上节博客一样

springcloud 微服务(一) 生产者 消费者demo

五.测试

分别启动eureka-server,user,item ,在浏览器上访问item的controller:
http://localhost:8880/12/12
在这里插入图片描述
到此,我们的远程服务已经调用成功!!!下节博客更精彩!!!

强烈推荐一套Java进阶博客,都是干货,走向架构师不是梦!

Java进阶全套博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值