ActiveMq学习笔记

先来个localhost:8161web操作页面小翻译

原版

翻译

 

我们可以通过http://localhost:8161访问管理页面,通过tcp://localhost:61616来连接消息服务器,用到的用户名和密码都在以下文件中(默认为admin=admin)

本人用的是SpringBoot框架,下面是application.yml的配置信息

server:
  port: 39527
  
spring:
  jms:
    pub-sub-domain: false #配置消息的类型, 如果是true表示为topic消息,如果为false则是queue队列消息
  activemq:
    user: admin
    password: admin
    broker-url: tcp://localhost:61616 #消息组件的连接主机信息

消息队列需要一个生产者/制造者/Producer,和一个消费者/接收者/Consumer,而且他有两种模式一个是queue点对点消息模式

另一个是Topic订阅者模式。

下面是queue消息模式基本代码小示例

Producer

@Service
public class MessageProduceImpl{

	@Autowired
	private JmsMessagingTemplate jmsmessagingtemplate;
	
	
	public void sendMessage(String msg) {
		// TODO Auto-generated method stub
		//这个是给两方设定一个点,生产点和接收点的标记 例:eclipse
		ActiveMQQueue activeMQQueue = new ActiveMQQueue("eclipse");
		this.jmsmessagingtemplate.convertAndSend(activeMQQueue,msg);
	}

}

JmsMessagingTemplate是一个自带的消息模型,springboot很简单,然后把两个参数交给JmsMessagingTemplate就好了

假如设定一些参数运行那么web界面会是这样

会显示有一个名字为eclipse的点,刚才我自己测试放了两百条数据,但是没有设定接收点,所以他Number Of Pending Messages 会显示有200条数据没有处理

下面是消费者

Comsumer

@Service
public class MessageConsumerService {
	@JmsListener(destination = "eclipse")
	public void receiveMessage(String text){
		
		System.out.println("------------接收消息------------"+text);
	}
	
}

也很简单,只要在方法上加一个注解@JmsListener(destination = "eclipse")就ok

假如只运行消费者,接收点是"eclipse" 那么只要一运行他就会接收到之前在点eclipse存储的200条数据

下面是一个发消息的小测试类

package com.cn.sola;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.cn.sola.producer.MessageProduceImpl;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ActiveMqApplicationTests {

	@Autowired
	private MessageProduceImpl messagerproducerservice;
	
	@Test
	public void contextLoads() {
		
		for (int i = 0; i < 200; i++) {
			
			messagerproducerservice.sendMessage(i+"");
		}
	}

}

queue基本小示例结束

 

 

基本订阅者模式小示例

订阅者模式相当于创建一个点,然后很多人来这里取东西,每个人有自己的标识

application.yml还是哪个yml不变

首先多一个配置类

package com.cn.sola.config;

import javax.jms.ConnectionFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.config.SimpleJmsListenerContainerFactory;

@Configuration
public class config {

	
	@Bean
    JmsListenerContainerFactory<?> myJmsContainerFactory(ConnectionFactory connectionFactory){
        SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true);
        return factory;
    }
}

Topic发布消息类 

Publisher

package com.cn.sola.topic.publisher;

import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;
@Service
public class Publisher {
	
	@Autowired
	private JmsMessagingTemplate jmssagingtemplate;
	
	public void publish(String destinationName,String message){
		
		ActiveMQTopic activeMQTopic = new ActiveMQTopic(destinationName);
		
		System.out.println("================>>>发布topic订阅消息"+message);
		
		this.jmssagingtemplate.convertAndSend(activeMQTopic,message);
	}
}

类对象变成了new ActiveMQTopic 别的没有什么变化

Topic接收消息类

本人闲的 多建立了几个

Subscriber

package com.cn.sola.topic.subscriber;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;
@Service
public class Subscriber {

	@JmsListener(destination = "topic.9981",containerFactory = "myJmsContainerFactory")
	public void subscribeone(String text){
		
		System.out.println("===============<<subscribeone收到订阅者消息"+text);
	}
	@JmsListener(destination = "topic.9981",containerFactory = "myJmsContainerFactory")
	public void subscribethree(String text){
		
		System.out.println("===============<<SubscriberCopyThree收到订阅者消息"+text);
	}

}
package com.cn.sola.topic.subscriber;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

@Service
public class SubscriberCopy {

	@JmsListener(destination = "topic.9981",containerFactory = "myJmsContainerFactory")
	public void subscribetwo(String text){
		
		System.out.println("===============<<subscribetwo收到订阅者消息"+text);
	}
}
package com.cn.sola.topic.subscriber;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;
@Service
public class SubscriberCopytwo {

	@JmsListener(destination = "topic.9981",containerFactory = "myJmsContainerFactory")
	public void subscribethree(String text){
		
		System.out.println("===============<<subscribethree收到订阅者消息"+text);
	}
}

 

测试类

 

package com.cn.sola;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.cn.sola.producer.MessageProduceImpl;
import com.cn.sola.topic.publisher.Publisher;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ActiveMqApplicationTests {

	@Autowired
	private MessageProduceImpl messagerproducerservice;
	
	@Autowired
	private Publisher publisher;
	
	@Test
	public void contextLoads() {
		
		publisher.publish("topic.9981", "topic.9981小测试一");
		publisher.publish("topic.9981", "topic.9981小测试二");
		publisher.publish("topic.9981", "topic.9981小测试三");
	}

}

对应的消费者全都可以接收到测试信息。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值