Springboot与分布式(快速整合)

介绍:

在国内常用分布式是zookeeper+dubbo(阿里)组合,但springboot推荐使用的是springboot+springcloud的组合。

1.首先介绍springboot与zookeeper+dubbo的整合。

   先在linux虚拟机中使用docker下载启动zookeeper容器(这里不详细说了,自己去学)

pom中引入两个依赖:

<!--引入dubbo-->
<dependency>
   <groupId>com.alibaba.boot</groupId>
   <artifactId>dubbo-spring-boot-starter</artifactId>
   <version>0.1.0</version>
</dependency>
<!--引入zookeeper的客户端工具-->
<dependency>
   <groupId>com.github.sgroschupf</groupId>
   <artifactId>zkclient</artifactId>
   <version>0.1</version>
</dependency>

在application.properties中写如下代码

dubbo.application.name=provider  //配置提供者名字
dubbo.registry.address=zookeeper://192.168.43.11:2181   //配置注册中心
dubbo.scan.base-packages=com.wangjie.love.DaoImp    //配置扫描包,找到包含@service的类

在你扫描包的路径下写入Dao和DaoImp

注意实现类上要有@Service(要发布那个实现类)这个@Service必须是dubbo的别导错包了。

然后启动服务器就可以将Provider发送到注册中心里。

我们再写一个消费者

我这里是两个Moudle

同样的现在pom中引入与Provider一样的依赖

在application.properties中写入

dubbo.application.name=consumer
dubbo.registry.address=zookeeper://192.168.43.11:2181

这里你要是也想把消费的服务发送到注册中心你也可以写一个扫描包,这里我们快速整合就不写了。

然后写一个实现类

@Service
public class UserService {
    @Reference
    TickerDao tickerDao;
    public void get(){
        String ticket = tickerDao.getTicket();
        System.out.println(ticket);
    }
}

这里的@Service是我们正常的@Service。只是实例这个类而已。

在springboot测试类中写入:

@SpringBootTest
class ConsumerUserApplicationTests {

   @Autowired
   UserService userService;
   @Test
   void contextLoads() {
      userService.get();
   }

点击测试类显示结果:

得到结果,注意你要一直把Provider的服务启动着,你别把服务关了然后去获取,那肯定获取不到的。

2.我们接下来介绍Springboot+SpringCloud的快速整合

首先来看下项目结构:

有消费者、提供者、注册中心

在这里我们就可以关了zookeeper服务器了,不需要了。

首先来看注册中心的Moudle

他的application.properties配置:

server.port=8761
eureka.instance.hostname=eureka-servier
#不会将自己注入到服务器中
eureka.client.register-with-eureka=false
#不从eureka服务器上获取注册的信息
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

我们再看看看启动类

@EnableEurekaServer 告诉我们这个Moudle是一个注册中心

然后我们启动项目访问http://localhost:8761/eureka/

看到了这个页面那么我们的注册中心就没有问题了

接下来看看Provider的Moudle

看看application.properties

server.port=8002
spring.application.name=provider-ticket
#注册的时候使用服务的ip地址
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

其实这里可以不写eureka.client.service-url.defaultZone

因为在源码中我们可以看到

他默认就是我们配置的路径。

然后再写个Controller

@RestController
public class TickerController {
    @Autowired
    TickerService tickerService;
    @GetMapping("/ticker")
    public String gettick(){
        return tickerService.getTicker();
    }
}

之后启动Provider的启动类即可。

我们接下来再创建我们的消费者Module

先来看看他的application.properties

server.port=8200
spring.application.name=consumer
#注册的时候使用服务的ip地址
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

只是修改了它的名字和端口

然后看看我们的启动类

再来看看我们的Controller类

@RestController
public class userController {
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/buy")
    public  String getTicker(String Name)
    {
        String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticker", String.class);
        return Name+s;
    }
}

这里我们是通过RestTemplate模板类对其他项目进行访问的。

然后启动消费类

若是均启动成功我们可以看到

这样的画面。

这个时候我们访问消费者的Controller

可以看到

成功访问到了其他项目的Controller返回的数据。

若是想试验负载均衡那么可以这样做:

点击项目的package打包成jar包

通过修改端口号8001和8002进行访问体验负载均衡。

如上看到启动了两个8001和8002端口的provider。注意(要先启动你们的Server然后在启动jar包项目)

启动我们的消费者

我们访问三次Controller的结果:

我们就可以知道他的访问不会一直都在一个项目上访问,而是均匀的访问,每个项目访问一次,若是学过nigunx的肯定对这个很了解,这里也不多说了。

这次的介绍就到此为止了下次再见。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值