activeMq和rabbitMq的搭建

集群的搭建有2个方案:

共享存储集群的原理:

优缺点:能够高可用,不能用负载均衡

当节点A挂掉后

基于复制的levelDB store的原理:broker cluster

优缺点:不能高可用,能负载均衡,至少需要3台服务器

 

俩者之前的对比:

 

俩个方案合并在一起:

 

搭建服务器:创建三个节点在一个服务器

 

还需要创建一个共享服务目录为b和c节点

配置a节点:

activeMq.xml

注释多余的配置端口:

 

在jetty.xml

配置管理端口

 

b节点中的activemq.xml配置文件

 

 

RabbitMQ的基本安装

1 准备:

yum install

build-essential openssl openssl-devel unixODBC unixODBC-devel

make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

 

2 下载:

wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm

wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm

wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm

rpm的安装方式是有顺序的:

rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm

rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm

rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

 

 

3 配置 vim /etc/hosts 以及 /etc/hostname (Linux防火墙)

 

3 配置文件:

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

比如修改密码、配置等等,例如:loopback_users 中的 <<"guest">>,只保留guest

服务启动和停止:

启动 rabbitmq-server start &

停止 rabbitmqctl app_stop

如果发现不了rabbit-server就全局搜索一下

/usr/lib/rabbitmq/bin/rabbitmq-server

 

4 管理插件:rabbitmq-plugins enable rabbitmq_management

5 访问地址:http://192.168.11.81:15672/

整合rabbitMq和spring boot

发布者:

package com.producer.demo;

import com.producer.demo.entity.Order;
import com.producer.demo.producer.Producer;
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;

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

	@Test
	public void contextLoads() {
	}


	@Autowired
	private Producer producer;
	@Test
	public void send() throws Exception{
		Order order = new Order();
		order.setId("2018111111");
		order.setName("你好");
		order.setMessageId("456789098765");
		producer.send(order);
	}
}

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<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.producer</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>SpringBoot-Pro</name>
	<description>Demo project for Spring Boot</description>

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



	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--rabbit依赖的包-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
		<!--依赖工具-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>
		<!--io-->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<!--阿里工具类-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.36</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
	</dependencies>

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


</project>

application.properties

###rabbitmq的配置
spring.rabbitmq.addresses=39.106.199.157:5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=1500
###配置文件的配置
server.port=8081
server.servlet.context-path=/
####spring的配置
spring.http.encoding.charset=utf-8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.jackson.default-property-inclusion=NON_null

消费者的代码和配置

package com.producer.demo.consumer;

import com.producer.demo.entity.Order;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;


import java.util.Map;

/**
 * @Description:
 * @Author: Wudi
 * @Create: 2018-09-09 20:59
 **/
@Component
public class Consumer {

    //注解监听
    @RabbitListener(
            bindings = @QueueBinding(
                    value = @Queue(value = "order-queue",durable = "true"),//队列
                    exchange = @Exchange(name="order-exchange",durable = "true",type = "topic"),//交换器
                    key = "order.#" //routingKey
            )
    )


    @RabbitHandler
    public void onOrderMessage(@Payload Order order, @Headers Map<String,Object> headers, Channel channel) throws Exception{
        System.out.println("订单id{}"+order.getId());
        Long number = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
        //ACK 机制,此时是手动机制
        channel.basicAck(number,false);
    }
}

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>consumer</name>
	<description>Demo project for Spring Boot</description>

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

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--rabbit依赖的包-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
		<!--依赖工具-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>
		<!--io-->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<!--阿里工具类-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.36</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
	</dependencies>

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


</project>

application.properties

###rabbitmq的基本配置
spring.rabbitmq.addresses=39.106.199.157:5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000
###consumer的基本配置
#最少监听线程数
spring.rabbitmq.listener.simple.concurrency=5
#最多监听线程数
spring.rabbitmq.listener.simple.max-concurrency=10
#线程限流
spring.rabbitmq.listener.direct.prefetch=1
#手动ack机制manual自动ack机制auto
spring.rabbitmq.listener.simple.acknowledge-mode=manual
###配置文件的配置
server.port=8082
server.servlet.context-path=/
####spring的配置
spring.http.encoding.charset=utf-8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.jackson.default-property-inclusion=NON_null

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Docker搭建ActiveMQ单机集群,你可以按照以下步骤进行操作: 1. 创建一个文件夹作为ActiveMQ的集群目录,可以使用命令`mkdir mq_cluster`来创建。 2. 进入这个目录,可以使用命令`cd mq_cluster`来切换到该目录下。 3. 使用命令`sudo cp -r /usr/local/apache-activemq-5.16.0/ mq_node01`复制ActiveMQ的安装目录到mq_node01文件夹中。同样地,可以使用命令`sudo cp -r /usr/local/apache-activemq-5.16.0/ mq_node02`和`sudo cp -r /usr/local/apache-activemq-5.16.0/ mq_node03`分别复制到mq_node02和mq_node03文件夹中。 4. 使用Docker运行三个ActiveMQ容器,可以使用`docker run`命令加上适当的参数来运行容器。这些参数可以指定容器的名称、网络设置、端口映射和挂载目录等。例如,可以使用命令`docker run --name activemq_node01 -p 61616:61616 -p 8161:8161 -v $(pwd)/mq_node01:/opt/apache-activemq-5.16.0 -d webcenter/activemq`来运行第一个ActiveMQ容器,其中`-p`参数指定了端口映射,`-v`参数指定了容器内外目录的挂载。同样地,可以运行第二个和第三个容器,并分别命名为activemq_node02和activemq_node03,并设置不同的端口映射和挂载目录。这样就成功搭建了一个ActiveMQ单机集群。 5. 如果需要进入容器内部进行操作,可以使用命令`docker exec -it 容器名称 bash`来进入容器。例如,可以使用命令`docker exec -it activemq_node01 bash`进入第一个容器。 请注意,这里的步骤是使用Docker运行ActiveMQ的一个简单示例,具体的操作可能会根据实际情况有所不同。在实际应用中,还需要根据需求进行配置和管理,比如配置集群的网络通信、负载均衡和故障转移等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MQ(解耦、削峰、异步)之ActiveMQ消息中间件(包括搭建zookeeper+activemq集群)](https://blog.csdn.net/qq_26496077/article/details/111835569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [RabbitMQ集群(docker简单搭建)](https://blog.csdn.net/weixin_52173120/article/details/115867624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值