页面“Rabbitmq cluster on docker-compose”与“C基础”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
→‎info
 
→‎c
 
第1行: 第1行:
 
+
=gdb=
=ins rabbitmq=
 
==info==
 
  适合于 3.610 and 3.7.5 版本
 
-p 15672:15672 http访问端口
 
-p 5672:5672 amqp访问端口
 
-p 4369 #unable to connect to epmd (port 4369) on rabbitmq01: address (cannot connect to host/port)
 
 
 
==mq1==
 
===Note===
 
 
 
有一种是 node1 不加别 , node2  add node1  ; node3  add node1 and node2  但是  rabbitmqctl cluster_status 可能看起来有些node alarms是down的 不过通过浏览器的不会
 
 
<pre>
 
<pre>
  
mkdir -p /home/data/docker-compose-mqcluster
+
使用例子
cd /home/data/docker-compose-mqcluster
+
184
##"登录容器请执行:rabbitmq-plugins enable rabbitmq_management 才可>使用WEB管理页面"
+
185gcc -g 11.2.c -o 11.2
vi docker-compose.yml
+
186gdb 11.2
 +
187
 +
188(gdb) start
 +
189(gdb) s  #一直用step命令(简写为s)进入函数中 ,n命令呢
 +
190
 +
191
 +
192step s  下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句
 +
193next n  执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)
  
version: '3.1' 
+
</pre>
services:
 
  rabbitmq:
 
    image: rabbitmq:3.6.10-management
 
    ports:
 
      - "5672:5672"
 
      - "4369:4369"
 
      #- "1883:1883"
 
      - "15672:15672"
 
      - "25672:25672"
 
  
    container_name: rabbitmqCluster01
 
  
    hostname: rabbitmq01
+
=c=
    extra_hosts:
 
      #- "rabbitmq01:192.168.10.211"#不要加上自己,不然会老是重启的
 
      - "rabbitmq02:192.168.10.212"
 
      - "rabbitmq03:192.168.10.213"
 
    environment:
 
 
 
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 
      RABBITMQ_DEFAULT_VHOST: /
 
 
 
      RABBITMQ_DEFAULT_USER: lxtxadmin
 
 
 
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 
 
 
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 
 
 
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 
 
 
    volumes:
 
      - ./data/rabbitmq:/var/lib/rabbitmq
 
 
 
    restart: always 
 
# docker-compose  up -d
 
</pre>
 
 
 
==mq2==
 
 
<pre>
 
<pre>
mkdir -p /home/data/docker-compose-mqcluster
 
cd /home/data/docker-compose-mqcluster
 
 
vi docker-compose.yml
 
 
version: '3.1' 
 
services:
 
  rabbitmq:
 
    image: rabbitmq:3.6.10-management
 
 
    ports:
 
      - "5672:5672"
 
      - "4369:4369"
 
      #- "1883:1883"
 
      - "15672:15672"
 
      - "25672:25672"
 
 
    container_name: rabbitmqCluster02
 
    hostname: rabbitmq02
 
    extra_hosts:
 
      - "rabbitmq01:192.168.10.211"
 
      #- "rabbitmq02:192.168.10.212" #不要加上自己,不然会老是重启的
 
      - "rabbitmq03:192.168.10.213"
 
    environment:
 
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 
      RABBITMQ_DEFAULT_VHOST: /
 
      RABBITMQ_DEFAULT_USER: lxtxadmin
 
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 
      CLUSTERED: 'true'
 
      CLUSTER_WITH: rabbit1
 
      RAM_NODE: 'true'
 
 
    volumes:
 
      - ./data/rabbitmq:/var/lib/rabbitmq
 
    restart: always 
 
  
 +
/*                                                                                                                                                                                         
 +
20答案是 Tuesday  因为列数定了是10                                                                                                                                                           
 +
21days[2] === days[2][10]                                                                                                                                                                   
 +
22                                                                                                                                                                                           
 +
23解说                                                                                                                                                                                       
 +
24days[2][0]=T                                                                                                                                                                               
 +
25days[2][1]=u                                                                                                                                                                               
 +
26days[2][2]=e                                                                                                                                                                               
 +
27days[2][3]=s                                                                                                                                                                               
 +
28days[2][4]=d                                                                                                                                                                               
 +
29days[2][5]=a                                                                                                                                                                               
 +
30days[2][6]=y                                                                                                                                                                               
 +
31days[2][7]=                                                                                                                                                                               
 +
32days[2][8]=                                                                                                                                                                               
 +
33days[2][9]=                                                                                                                                                                               
 +
34                                                                                                                                                                                           
 +
35               
 
</pre>
 
</pre>
 
+
==eg ==
==mq3==
+
=== 石头剪刀布===
 
<pre>
 
<pre>
mkdir -p /home/data/docker-compose-mqcluster
+
#include <stdio.h>
cd /home/data/docker-compose-mqcluster
+
#include <stdlib.h>
 
+
#include <time.h>
vi docker-compose.yml
 
 
 
 
version: '3.1' 
 
services:
 
  rabbitmq:
 
    image: rabbitmq:3.6.10-management
 
 
 
    ports:
 
      - "5672:5672"
 
      - "4369:4369"
 
      #- "1883:1883"
 
      - "15672:15672"
 
      - "25672:25672"
 
 
 
    container_name: rabbitmqCluster03
 
 
 
    hostname: rabbitmq03
 
    extra_hosts:
 
      - "rabbitmq01:10.3.10.141"
 
      - "rabbitmq02:10.3.10.142"
 
    environment:
 
  
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
+
int main(void)
      RABBITMQ_DEFAULT_VHOST: /
+
{
 +
char gesture[3][10] = { "scissor", "stone", "cloth" };
 +
int man, computer, result, ret;
  
      RABBITMQ_DEFAULT_USER: lxtxadmin
+
srand(time(NULL));
 +
while (1) {
 +
computer = rand() % 3;
 +
  printf("\nInput your gesture (0-scissor 1-stone 2-cloth):\n");
 +
ret = scanf("%d", &man);
 +
  if (ret != 1 || man < 0 || man > 2) {
 +
printf("Invalid input! Please input 0, 1 or 2.\n");
 +
continue;
 +
}
 +
printf("Your gesture: %s\tComputer's gesture: %s\n",
 +
gesture[man], gesture[computer]);
  
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
+
result = (man - computer + 4) % 3 - 1;
 +
if (result > 0)
 +
printf("You win!\n");
 +
else if (result == 0)
 +
printf("Draw!\n");
 +
else
 +
printf("You lose!\n");
 +
}
 +
return 0;
 +
}
  
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 
  
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
+
/*
      CLUSTERED: 'true'
+
0、1、2三个整数分别是剪刀石头布在程序中的内部表示,用户也要求输入0、1或2,然后和计算机随机生成的0、1或2比胜负。这个程序的主体是一个死循环,需要按Ctrl-C退出程序。以往我们写的程序都只有打印输出,在这个程序中我们第一次碰到处理用户输入的情况。在这里只是简单解释一下,以后再细讲。scanf("%d", &man)这个调用的功能是等待用户输入一个整数并回车,这个整数会被scanf函数保存在man这个整型变量里。如果用户输入合法(输入的确实是整数而不是字符串),则scanf函数返回1,表示成功读入一个数据。但即使用户输入的是整数,我们还需要进一步检查是不是在0~2的范围内,写程序时对用户输入要格外小心,用户有可能输入任何数据,他才不管游戏规则是什么。
      CLUSTER_WITH: rabbit1
 
      RAM_NODE: 'true'
 
  
    volumes:
+
和printf类似,scanf也可以用%c、%f、%s等转换说明。如果在传给scanf的第一个参数中用%d、%f或%c表示读入一个整数、浮点数或字符,则第二个参数的形式应该是&运算符加一个相应类型的变量名,表示读进来的数存到这个变量中;如果在第一个参数中用%s读入一个字符串,则第二个参数应该是数组名,数组名前面不加&,因为数组类型做右值时自动转换成指针类型,而scanf后面这个参数要的就是指针类型,在第 10 章 gdb有scanf读入字符串的例子。&运算符的作用也是得到一个指针类型,这个运算符以后再详细解释。
  
      - ./data/rabbitmq:/var/lib/rabbitmq
+
留给读者的思考问题是:(man - computer + 4) % 3 - 1这个神奇的表达式是如何比较出0、1、2这三个数字在“剪刀石头布”意义上的大小的
 +
*/
  
    restart: always 
 
 
</pre>
 
</pre>
  
=config=
+
[https://wenku.baidu.com/view/55e520da5022aaea998f0f5e.html 石头剪刀布_C语言]
==将节点2,3加入集群==
 
<pre>
 
#在rabbit2机器进入容器的命令行
 
sudo docker exec -it rabbitmqCluster02 /bin/bash
 
  
#加入集群
+
https://blog.csdn.net/guoqingchun/article/details/8104197
rabbitmqctl stop_app
 
rabbitmqctl join_cluster rabbit@rabbitmq01
 
rabbitmqctl start_app
 
  
rabbit3执行相同的命令
+
=排序与查找=
docker exec -it rabbitmqCluster03 /bin/bash
+
==插入排序 ==
rabbitmqctl stop_app
 
rabbitmqctl join_cluster rabbit@rabbitmq01
 
rabbitmqctl start_app
 
 
 
 
 
查询集群状态
 
rabbitmqctl cluster_status
 
</pre>
 
 
 
== nginx 配置==
 
 
<pre>
 
<pre>
 +
#include <stdio.h>
 +
#define LEN 5
 +
int a[LEN] = { 10, 5, 2, 4, 7 };
 +
void insertion_sort(void)
 +
{
 +
int i, j, key;
 +
for (j = 1; j < LEN; ++j) {
 +
printf("%d, %d, %d, %d, %d\n",
 +
      a[0], a[1], a[2], a[3], a[4]);
 +
key = a[j];  //key 标记为未排序的第一个元素
 +
i = j - 1;
 +
                // key  与已排序元素从大到小比较,寻找key应插入的元素 a[i+1]一般就是key 起初的值
 +
////采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间 ?
  
#如果是yum nginx  在放在 conf.d/mq.conf
+
while (i >= 0 && a[i] > key) {
  server {
+
a[i+1] = a[i];
        listen      80;
+
--i; //跳出while
        server_name  mq.com;
+
}
+
a[i+1] = key; ////插入到正确位置
 
+
}
        location / {
+
printf("%d, %d, %d, %d, %d\n",
            proxy_pass http://10.3.10.141:15672;
+
      a[0], a[1], a[2], a[3], a[4]);
            proxy_set_header X-Real-IP $remote_addr;
+
}
            proxy_set_header Host $host;
+
int main(void)
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
{
         
+
insertion_sort();
        }
+
return 0;
    }
+
}
 
+
/* 就是key 一直和前面排好的比,找到正确的位置
 
+
10, 5, 2, 4, 7
NOTE  selinux  记得关掉  不然可能是502哦
+
5, 10, 2, 4, 7
#SELinux设置
+
2, 5, 10, 4, 7
getenforce  #查看SELINUX工作模式
+
2, 4, 5, 10, 7
 
+
2, 4, 5, 7, 10 */
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #禁用SELINUX
 
setenforce 0 #临时禁用SELINUX,无需重启
 
 
 
SELINUX=enforcing
 
#此项定义selinux状态。
 
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去
 
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
 
#disabled—禁用selinux。
 
 
 
 
</pre>
 
</pre>
  
=troubleshooting =
+
==算法的时间复杂度分析==
<pre>
+
则总的执行时间粗略估计是(n-1)*(c1+c2+c5+m*(c3+c4))。 #怎么来的呢  线性函数  不记得了 要补一下
 
 
1.docker-compose.yml文件报错
 
ERROR: The Compose file './docker-compose.yml' is invalid because:
 
services.rabbitmq.environment.CLUSTERED contains true, which is an invalid type, it should be a string, number, or a null
 
 
 
 
 
CLUSTERED: true -->CLUSTERED: 'true'
 
 
 
  
绑hosts的前进 不要全局FQ  SSR常常坑我们
+
[https://blog.csdn.net/qq_25775935/article/details/88724130 插入排序算法及C语言实现]
  
 
+
=附录 A. 字符编码=
</pre>
+
20191112
 +
字符编码的高位 左边是也
  
 
=see also=
 
=see also=
 +
[https://wiki.ubuntu.com.cn/C%E8%AF%AD%E8%A8%80%E7%AE%80%E8%A6%81%E8%AF%AD%E6%B3%95%E6%8C%87%E5%8D%97 C语言简要语法指南]
  
https://www.rabbitmq.com/clustering.html#peer-discovery-how-does-it-work
+
https://wiki.ubuntu.com.cn/Compiling_C
 
 
[http://josuelima.github.io/docker/rabbitmq/cluster/2017/04/19/setting-up-a-rabbitmq-cluster-on-docker.html Setting up a RabbitMQ Cluster on Docker]
 
 
 
[https://blog.csdn.net/qq_32488647/article/details/81941491 Docker分布式部署RabbitMQ集群]
 
 
 
[https://www.cnblogs.com/cheyunhua/p/8362200.html 多台机器 值得看 Docker:搭建RabbitMQ集群]
 
 
 
[https://michael728.github.io/2019/06/07/docker-rabbitmq-env/ docker-compose 安装搭建 RabbitMQ 集群]
 
 
 
[https://blog.csdn.net/belonghuang157405/article/details/83540148 单一台机器母机docker简易搭建RabbitMQ集群]
 
 
 
[https://blog.csdn.net/jinyidong/article/details/80003362  RabbitMQ之集群搭建]
 
 
 
也是单物理机么 ?
 
https://www.cnblogs.com/vipstone/p/9362388.html
 
 
 
 
 
  
 +
[https://wiki.ubuntu.com.cn/Gcchowto Gcc-howto]
  
[[category:ops]]
+
[[category:c]]

2019年11月15日 (五) 03:47的版本

gdb


使用例子
184
185gcc -g 11.2.c -o 11.2
186gdb 11.2
187
188(gdb) start
189(gdb) s   #一直用step命令(简写为s)进入函数中 ,n命令呢
190
191
192step s  下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句
193next n  执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)


c


/*                                                                                                                                                                                          
20答案是 Tuesday  因为列数定了是10                                                                                                                                                            
21days[2] === days[2][10]                                                                                                                                                                     
22                                                                                                                                                                                            
23解说                                                                                                                                                                                        
24days[2][0]=T                                                                                                                                                                                
25days[2][1]=u                                                                                                                                                                                
26days[2][2]=e                                                                                                                                                                                
27days[2][3]=s                                                                                                                                                                                
28days[2][4]=d                                                                                                                                                                                
29days[2][5]=a                                                                                                                                                                                
30days[2][6]=y                                                                                                                                                                                
31days[2][7]=                                                                                                                                                                                 
32days[2][8]=                                                                                                                                                                                 
33days[2][9]=                                                                                                                                                                                 
34                                                                                                                                                                                            
35                 

eg

石头剪刀布

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	char gesture[3][10] = { "scissor", "stone", "cloth" };
	int man, computer, result, ret;

	srand(time(NULL));
	while (1) {
		computer = rand() % 3;
	  	printf("\nInput your gesture (0-scissor 1-stone 2-cloth):\n");
		ret = scanf("%d", &man);
	  	if (ret != 1 || man < 0 || man > 2) {
			printf("Invalid input! Please input 0, 1 or 2.\n");
			continue;
		}
		printf("Your gesture: %s\tComputer's gesture: %s\n", 
			gesture[man], gesture[computer]);

		result = (man - computer + 4) % 3 - 1;
		if (result > 0)
			printf("You win!\n");
		else if (result == 0)
			printf("Draw!\n");
		else
			printf("You lose!\n");
	}
	return 0;
}


/*
0、1、2三个整数分别是剪刀石头布在程序中的内部表示,用户也要求输入0、1或2,然后和计算机随机生成的0、1或2比胜负。这个程序的主体是一个死循环,需要按Ctrl-C退出程序。以往我们写的程序都只有打印输出,在这个程序中我们第一次碰到处理用户输入的情况。在这里只是简单解释一下,以后再细讲。scanf("%d", &man)这个调用的功能是等待用户输入一个整数并回车,这个整数会被scanf函数保存在man这个整型变量里。如果用户输入合法(输入的确实是整数而不是字符串),则scanf函数返回1,表示成功读入一个数据。但即使用户输入的是整数,我们还需要进一步检查是不是在0~2的范围内,写程序时对用户输入要格外小心,用户有可能输入任何数据,他才不管游戏规则是什么。

和printf类似,scanf也可以用%c、%f、%s等转换说明。如果在传给scanf的第一个参数中用%d、%f或%c表示读入一个整数、浮点数或字符,则第二个参数的形式应该是&运算符加一个相应类型的变量名,表示读进来的数存到这个变量中;如果在第一个参数中用%s读入一个字符串,则第二个参数应该是数组名,数组名前面不加&,因为数组类型做右值时自动转换成指针类型,而scanf后面这个参数要的就是指针类型,在第 10 章 gdb有scanf读入字符串的例子。&运算符的作用也是得到一个指针类型,这个运算符以后再详细解释。

留给读者的思考问题是:(man - computer + 4) % 3 - 1这个神奇的表达式是如何比较出0、1、2这三个数字在“剪刀石头布”意义上的大小的
*/

石头剪刀布_C语言

https://blog.csdn.net/guoqingchun/article/details/8104197

排序与查找

插入排序

#include <stdio.h>
#define LEN 5
int a[LEN] = { 10, 5, 2, 4, 7 };
void insertion_sort(void)
{
	int i, j, key;
	for (j = 1; j < LEN; ++j) {
		printf("%d, %d, %d, %d, %d\n",
		       a[0], a[1], a[2], a[3], a[4]);
		key = a[j];  //key 标记为未排序的第一个元素
		i = j - 1;
                // key  与已排序元素从大到小比较,寻找key应插入的元素 a[i+1]一般就是key 起初的值
////采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间 ?

		while (i >= 0 && a[i] > key) {
			a[i+1] = a[i];
			--i; //跳出while 
		}
		a[i+1] = key; ////插入到正确位置
	}
	printf("%d, %d, %d, %d, %d\n",
	       a[0], a[1], a[2], a[3], a[4]);
}
int main(void)
{
	insertion_sort();
	return 0;
}
/* 就是key 一直和前面排好的比,找到正确的位置 
10, 5, 2, 4, 7
5, 10, 2, 4, 7
2, 5, 10, 4, 7
2, 4, 5, 10, 7
2, 4, 5, 7, 10 */ 

算法的时间复杂度分析

则总的执行时间粗略估计是(n-1)*(c1+c2+c5+m*(c3+c4))。 #怎么来的呢  线性函数  不记得了 要补一下

插入排序算法及C语言实现

附录 A. 字符编码

20191112

字符编码的高位 左边是也

see also

C语言简要语法指南

https://wiki.ubuntu.com.cn/Compiling_C

Gcc-howto