springboot + kafka+消费者和生产者

springboot 对kafka的集成特别友好

话不多说

pom 依赖文件
	<dependency>
		    <groupId>org.springframework.kafka</groupId>
		    <artifactId>spring-kafka</artifactId>
		</dependency>
配置文件
# kafka集群IP
spring.kafka.bootstrap-servers=192.168.23.223:19092,192.168.23.224:19092,192.168.23.225:19092
#  生产者  key 和 value  序列化方法
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
#消费者默认的组ID
spring.kafka.consumer.group-id:smk_ad
#  消费者 key 和 value  序列化方法
spring.kafka.consumer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.consumer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

生产者代码
package com.smk.ad.service.kafka;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

// 注入的时候只能使用 @Component  不能使用 @Service
@Component
public class KafkaProductService {


  // 引入泛型必须和配置文件保持一致
	@Autowired
	private KafkaTemplate<String, String> kafkaTemplate;

	/**
	 * 发送消息
	 * 
	 * @param msg
	 */
	public void sendClickMsg(String msg) {
		kafkaTemplate.send(KafkaConsumerService.topic, msg);
	}

}

消费者
package com.smk.ad.service.kafka;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

import com.cat.common.exception.RequestException;
import com.cat.common.json.RJson;
import com.cat.common.lang.RString;
import com.smk.ad.bean.ad.AdCount;
import com.smk.ad.service.ad.AdCountService;

@Component
public class KafkaConsumerService {

	public static final  String topic = "smk_ad_log";
	
	public static final  String group = "smk_ad";
	
	@Autowired
    private AdCountService adCountService;
	
// KAFKA监听的注解,  topic
	@KafkaListener(topics = {topic})
	public void receive(String msg) {
		
	}

}

真的想说:炒鸡简单有木有。。。非常方便 有木有。。

KAFKA广播模式

上面的例子是一个简单的 生产者 消费者模式,一个生产者,一个消费者
kafka 还有一种广播模式, 一个生产者。 多个消费者 消费同一个消息。

坑: 我使用的 springboot 版本是 1.5.10.RELEASE 版本的。
使用配置文件

<dependency>
		    <groupId>org.springframework.kafka</groupId>
		    <artifactId>spring-kafka</artifactId>
		</dependency>

这种方式默认引用的是 1.1 版本的spring-kafka 版本。 代码中不支持 一个项目配置多个不同的groupId的消费者
spring 支持多个gourpIde 消费者是从 1.3 版本开始支持的。

<dependency>
		    <groupId>org.springframework.kafka</groupId>
		    <artifactId>spring-kafka</artifactId>
		    <version>1.3.5.RELEASE</version>
		</dependency>

样例代码:
生产者:(生产者没有什么不同的)

package com.smk.ad.service.kafka.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.cat.common.lang.RDate;

@Component
public class ProTest {

	@Autowired
	private KafkaTemplate<String, String> kafkaTemplate;

	/**
	 * 发送消息
	 * 
	 * @param msg
	 */
	@Scheduled(cron = "0/5 * * * * ?")
	public void sendClickMsg() {
		String m = "消息:"+RDate.getCurrentTimeSssStr();
		kafkaTemplate.send(Coum.topic, m);
		System.out.println("生产发送消息:"+m);
	}

}

消费者:

package com.smk.ad.service.kafka.test;

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Component
public class Coum {

public static final  String topic = "gb_test";
	
	public static final  String group = "c1";
	
	@KafkaListener(topics = {topic},groupId=group)
	public void receive1(String msg) {
		System.out.println("c1-1"+msg);
	}
	
	@KafkaListener(topics = {topic},groupId=group)
	public void receive12(String msg) {
		System.out.println("c1-2"+msg);
	}
	
	@KafkaListener(topics = {topic},groupId=group)
	public void receive13(String msg) {
		System.out.println("c1-3"+msg);
	}
	
	
	@KafkaListener(topics = {topic},groupId="c2")
	public void receive2(String msg) {
		System.out.println("c2"+msg);
	}
	
	
	
	@KafkaListener(topics = {topic},groupId="C3")
	public void receive3(String msg) {
		System.out.println("c3"+msg);
	}
}

我这里配置的消费者 有5个消费者, 前面3个消费者:c1-1 ,c1-2 ,c1-3 他们的groupId 相同,都是C1
后面2个消费者的groupId不同,分别是 c2 , c3

看最终的消费信息

生产发送消息:消息:2019-04-03 16:24:10:002
c3消息:2019-04-03 16:24:10:002
c2消息:2019-04-03 16:24:10:002
c1-2消息:2019-04-03 16:24:10:002

消息只消费了 3次。 广播模式成功

简单说下kafka 和 rocketmq的区别

namesvr 和 zookeeper…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值