Skip to content

Latest commit

 

History

History
118 lines (90 loc) · 2.88 KB

README.md

File metadata and controls

118 lines (90 loc) · 2.88 KB

dis-eventbus

Simple distributed event-bus based on:

  • spring boot
  • rabbitMQ
  • google guava

目标:

  • 实现一个分布式事件总线。
  • 最大限度的方便开发者使用监听者模式构建低耦合、易于扩展的应用程序。
  • 能够使用注解发布事件等一系列高效编程方式。

环境

  • Maven 3
  • Java 8

maven依赖

		
		<dependency>
			<groupId>com.github.taniqng</groupId>
			<artifactId>dis-eventbus-api</artifactId>
			<version>1.0.6</version>
		</dependency>
		
		<dependency>
			<groupId>com.github.taniqng</groupId>
			<artifactId>dis-eventbus-core</artifactId>
			<version>1.0.6</version>
		</dependency>

定义你的事件

	/**
	 * 定义一个发表文章事件
	 */
	public class SendPostEvent extends DisEvent<PostInfo>{

		private static final long serialVersionUID = -138646642993478976L;

	}

基于注解的事件发布

	/**
	 * 保存文章
	 */	
	@RequestMapping(value = "/posts", method = RequestMethod.POST)
	@SendEvent(SendPostEvent.class)
	public PostInfo savePost(@Valid @NotNull @RequestBody PostInfo post) {
		//你的业务代码
		//返回文章对象, 该对象作为事件发布的data, 可以被事件监听者接收。
	}

手动发布(以下和基于注解的方式等价,合理布局代码可以避免手动发布)

	@Autowired DisEventBus bus;
	
	@RequestMapping(value = "/posts", method = RequestMethod.POST)
	public PostInfo savePost(@Valid @NotNull @RequestBody PostInfo post) {
		//你的业务代码
		bus.publishEvent(SendPostEvent.class, post);
	}

事件监听器

/**
 * 监听PostInfo的变化,同步更新Elasticsearch。<br>
 * 这里可以考虑使用缓冲队列,然后bulk操作来批量处理,后期优化。<br>
 * 
 * <p>
 *  注:对单机而言这个操作于主业务来说是异步的。对分布式环境更是会选择最空闲的节点来执行。<br>
 *      所以注意使用合适的锁来保证对共享资源操作时的同步。
 * </p>
 */
@MessageListener
public class PostInfoListener {
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	SearchService postService;
	
	@Subscribe	
	public void accept(SendPostEvent event){
	  PostInfo postInfo = event.getData();	  
	  //将postInfo保存至ES
	}
	
	@Subscribe
	public void accept(EditPostEvent event){
	  PostInfo postInfo = event.getData();	  
	  //更新ES指定的document
	}
}

Q & A

Q: 项目中使用activeMQ如何操作?
A: dis-eventbus使用spring-boot-starter-amqp, 默认使用rabbitMQ作为Spring AMQP规范(SPI)的provider,只需execlude掉spring-rabbit,实现自己的amqp provider。

License

dis-eventbus is Open Source software released under the http://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 license].